Directory.GetFiles:如何只获取文件名,而不是完整路径? [复制]

Posted

技术标签:

【中文标题】Directory.GetFiles:如何只获取文件名,而不是完整路径? [复制]【英文标题】:Directory.GetFiles: how to get only filename, not full path? [duplicate] 【发布时间】:2012-09-13 12:20:38 【问题描述】:

可能重复:How to get only filenames within a directory using c#?

使用 C#,我想获取文件夹中的文件列表。 我的目标:["file1.txt", "file2.txt"]

所以我写了这个:

string[] files = Directory.GetFiles(dir);

不幸的是,我得到了这个输出:["C:\\dir\\file1.txt", "C:\\dir\\file2.txt"]

之后我可以去掉不需要的“C:\dir\”部分,但有没有更优雅的解决方案?

【问题讨论】:

【参考方案1】:

您可以使用System.IO.Path.GetFileName 来执行此操作。

例如,

string[] files = Directory.GetFiles(dir);
foreach(string file in files)
    Console.WriteLine(Path.GetFileName(file));

虽然您可以使用FileInfo,但它比您已经使用的方法(仅检索文件路径)要重得多。所以我建议你坚持使用GetFiles,除非你需要FileInfo类的额外功能。

【讨论】:

string[] files = Directory.GetFiles(dir).Select(file => Path.GetFileName(file)).ToArray(); @贾斯汀var files = Directory.GetFiles(dir).Select(Path.GetFileName);【参考方案2】:

试试,

  string[] files =  new DirectoryInfo(dir).GetFiles().Select(o => o.Name).ToArray();

以上行可能会抛出 UnauthorizedAccessException。要处理此检查,请查看以下链接

C# Handle System.UnauthorizedAccessException in LINQ

【讨论】:

【参考方案3】:

看看使用FileInfo.Name Property

类似

string[] files = Directory.GetFiles(dir); 

for (int iFile = 0; iFile < files.Length; iFile++)
    string fn = new FileInfo(files[iFile]).Name;

也看看使用DirectoryInfo Class和FileInfo Class

【讨论】:

【参考方案4】:

使用它只获取文件名。

Path.GetFileName(files[0]);

【讨论】:

以上是关于Directory.GetFiles:如何只获取文件名,而不是完整路径? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Directory.GetFiles()获取多个类型格式的文件

C# Directory.GetFiles()获取文件时如果是根目录时有隐藏文件则报错的处理

c# 将 Directory.GetFiles 添加到 Zip 文件

Directory.EnumerateFiles 与 Directory.GetFiles 有啥区别?

Directory.GetFiles(path, ".txt", SearchOption.AllDirectories);不提供文件

Directory.GetFiles 有效,Directory.GetDirectories 不在同一目录中