【发布时间】:2012-09-13 12:20:38
【问题描述】:
使用 C#,我想获取文件夹中的文件列表。
我的目标:["file1.txt", "file2.txt"]
所以我写了这个:
string[] files = Directory.GetFiles(dir);
不幸的是,我得到了这个输出:["C:\\dir\\file1.txt", "C:\\dir\\file2.txt"]
之后我可以去掉不需要的“C:\dir\”部分,但有没有更优雅的解决方案?
【问题讨论】:
使用 C#,我想获取文件夹中的文件列表。
我的目标:["file1.txt", "file2.txt"]
所以我写了这个:
string[] files = Directory.GetFiles(dir);
不幸的是,我得到了这个输出:["C:\\dir\\file1.txt", "C:\\dir\\file2.txt"]
之后我可以去掉不需要的“C:\dir\”部分,但有没有更优雅的解决方案?
【问题讨论】:
您可以使用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);
试试,
string[] files = new DirectoryInfo(dir).GetFiles().Select(o => o.Name).ToArray();
以上行可能会抛出 UnauthorizedAccessException。要处理此检查,请查看以下链接
【讨论】:
类似
string[] files = Directory.GetFiles(dir);
for (int iFile = 0; iFile < files.Length; iFile++)
string fn = new FileInfo(files[iFile]).Name;
【讨论】:
使用它只获取文件名。
Path.GetFileName(files[0]);
【讨论】: