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

98

可能是重复问题:
如何使用C#仅获取文件夹中的文件名?

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

因此,我编写了以下代码:

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

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

我可以在之后剥离不需要的"C:\dir\"部分,但是否有更加优雅的解决方案?

4个回答

222
你可以使用System.IO.Path.GetFileName来实现这个功能。
例如,
string[] files = Directory.GetFiles(dir);
foreach(string file in files)
    Console.WriteLine(Path.GetFileName(file));

尽管你可以使用 FileInfo,但它比你已经使用的方法(仅检索文件路径)更加沉重。因此,我建议你坚持使用 GetFiles,除非你需要 FileInfo 类的其他功能。


41
string[] files = Directory.GetFiles(dir).Select(file => Path.GetFileName(file)).ToArray();这行代码的作用是获取目录 dir 中的所有文件名,并将它们存储在字符串数组 files 中。使用 Directory.GetFiles 方法获取目录中的所有文件路径,然后使用 Select 方法应用一个函数来获取每个文件的文件名,并使用 ToArray 方法将结果存储在字符串数组中。 - Justin Schwartzenberger
6
@Justin var files = Directory.GetFiles(dir).Select(Path.GetFileName);嗨,Justin。这段代码的意思是获取指定目录下的所有文件名,并将它们存储在一个变量中。 - BlueRaja - Danny Pflughoeft
1
Danny的注释将导致文件变为IEnumerable<string>而不是string[],以防您需要将其强制转换为字符串数组并访问其方法。 - Marcus Parsons

40

9

请查看使用FileInfo.Name 属性

类似于以下内容:

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

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

还可以查看使用DirectoryInfo类FileInfo类


4

使用此方法仅获取文件名。

Path.GetFileName(files[0]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接