我正在制作关于从所选驱动器获取所有文本文件的项目。问题是我得到了所有文本文件的名称以及路径,但我需要的只是名称。我不想甚至得到扩展名,我想要的只是该文本文件的名称。我在互联网上搜索过但无法找到正确的答案。我将所有这些名称存储在列表框中。这是我的代码:
String[] dir1 = System.IO.Directory.GetDirectories(@"F:\");
for (int i = 0; i < dir1.Length; i++)
{
FileAttributes attributes = File.GetAttributes(dir1[i]);
if ((attributes & FileAttributes.Hidden) != fileAttributes.Hidden)
{
string folder = @""+ dir1[i];
txtfiles = Directory.GetFiles(folder, "*.txt");
listBox1.Items.AddRange(txtfiles);
}
}
如何才能获取名称,而不是整个路径和扩展名?
答案 0 :(得分:5)
Path.GetFileNameWithoutExtension
方法会为您完成此操作。
https://msdn.microsoft.com/en-us/library/system.io.path.getfilenamewithoutextension(v=vs.110).aspx
返回没有扩展名的指定路径字符串的文件名。
将GetFiles的结果传递给方法,它应该返回您需要的内容。
答案 1 :(得分:1)
你需要使用Path.GetFileName
方法,它只会从路径中提取文件名,所以你可以做的是投射txtfiles
来获取文件名的集合,如:
listBox1.Items.AddRange(txtfiles.Select(file=>Path.GetFileName(file));
如果你只需要路径,而不是实际读取它们,你可以使用EnumerateFiles
方法,这会更好的内存性能:
listBox1.Items.AddRange(txtDirectory.EnumerateFiles(folder, "*.txt")
.Select(file=>Path.GetFileName(file))
);
此外,如果您只需要没有扩展名的文件名,那么您可以建议Valuator answer。
答案 2 :(得分:1)
查看System.IO.Path.GetFileNameWithoutExtension()
您可以执行类似
的操作txtfiles = Directory.GetFiles(folder, "*.txt");
var fileNames = txtfiles.Select(System.IO.Path.GetFileNameWithoutExtension).ToList();