Directory.GetFiles:如何获得唯一的文件名,而不是完整的path?

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

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

所以我写了这个:

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

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

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

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

例如,

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

虽然你可以使用FileInfo ,但它比你已经使用的方法(只是检索文件path)重得多。 所以我build议你坚持使用GetFiles除非你需要FileInfo类的附加function。

尝试,

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

上面的行可能会抛出UnauthorizedAccessException。 要处理这个检查下面的链接

C#处理LINQ中的System.UnauthorizedAccessException

看看使用FileInfo.Name属性

就像是

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

也看看使用DirectoryInfo类和FileInfo类

使用此来获取只有文件名。

 Path.GetFileName(files[0]);