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

Nic*_*oul 65 c# getfiles filepath

可能重复:
如何使用c#仅获取目录中的文件名?

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

所以我写了这个:

string[] files = Directory.GetFiles(dir);
Run Code Online (Sandbox Code Playgroud)

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

之后我可以删除不需要的"C:\ dir \"部分,但有更优雅的解决方案吗?

Red*_*ter 146

你可以System.IO.Path.GetFileName用来做这件事.

例如,

string[] files = Directory.GetFiles(dir);
foreach(string file in files)
    Console.WriteLine(Path.GetFileName(file));
Run Code Online (Sandbox Code Playgroud)

虽然你可以使用FileInfo,但它比你已经使用的方法(只是检索文件路径)更重要.因此,GetFiles除非您需要FileInfo该类的其他功能,否则我建议您坚持使用.

  • `string [] files = Directory.GetFiles(dir).Select(file => Path.GetFileName(file)).ToArray();` (22认同)
  • @Justin`var files = Directory.GetFiles(dir).Select(Path.GetFileName);` (3认同)

Jig*_*ker 30

尝试,

  string[] files =  new DirectoryInfo(dir).GetFiles().Select(o => o.Name).ToArray();
Run Code Online (Sandbox Code Playgroud)

上面的行可能会抛出UnauthorizedAccessException.要处理此检查以下链接

在LINQ中C#处理System.UnauthorizedAccessException


Adr*_*der 8

看看使用FileInfo.Name属性

就像是

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

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

另请参阅使用DirectoryInfo类FileInfo类