如何从这段C#代码中获取基本文件名?

16

我有以下代码:

string[] files = Directory.GetFiles(@"C:\Notes", "*.txt", SearchOption.TopDirectoryOnly);
foreach(string file in files)
当我检查文件内容时,它包含目录路径和扩展名。 有没有办法只获取文件名?

2
顺便说一下,你可能不应该称这些东西为file和files。在Unix上,这些通常指文件描述符,在Windows上则是文件句柄。对于浏览你的代码的人来说,将它们分别称为filename和filenames可能会(稍微)更清晰一些。 - demented hedgehog
4个回答

41
您可以使用FileInfo类:
FileInfo fi = new FileInfo(file);
string name = fi.Name;

如果你只需要文件名,快速简单地使用 Path

string name = Path.GetFileName(file);

5
由于这太过浪费。我的测试显示,它比仅使用 Path.GetFileName 慢大约11倍。使用两者的正确时间是有的,但现在不应该使用 FileInfo - Oskar Kjellin
请查看这个问题:https://dev59.com/oG445IYBdhLWcg3wNXk_ - Oskar Kjellin
4
@Oskar:原帖并未表明性能要求。此外,没有人确定原帖作者在他的应用程序中需要哪些其他信息,例如文件属性。 - Evan Mulawski
@Evan那真的很重要吗?我认为这不是一个好的做法,因此我会点踩。 - Oskar Kjellin
1
如果Evan需要在foreach循环中使用fileinfo类,如果我没记错的话,创建一个DirectoryInfo并使用GetFiles会更快。 - Oskar Kjellin

20
您可以使用以下方法:Path.GetFileName(file)

4
System.IO.FileInfo f = new System.IO.FileInfo(@"C:\pagefile.sys");  // Sample file.
System.Windows.Forms.MessageBox.Show(f.FullName);  // With extension.
System.Windows.Forms.MessageBox.Show(System.IO.Path.GetFileNameWithoutExtension(f.FullName));  // What you wants.

2
首先,FileInfo.FullName会给你完整的文件路径,这不是问题所要求的。其次,如果你要使用System.IO.Path方法,为什么要在第一次创建一个FileInfo对象呢? - Peter Monks

1
如果您需要去除扩展名、路径等信息,您应该将此字符串填入FileInfo中,并使用其属性或使用Path类的静态方法。

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