路径.获取文件名 - 尝试从目录中获取文件名

3

我已经能够让这段代码正常工作:

string[] path = Directory.GetFiles(@"c:\Users\james.krueger\Desktop\Test Folder\");

问题在于它显示了整个路径。
下一段代码似乎是我想要的。然而,它提示我出现错误消息,即不能隐式转换字符串为字符串数组。
有什么办法可以只获取文件名吗?
string[] path = Path.GetFileName(@"c:\Users\james.krueger\Desktop\Test Folder\");

string[] filePaths = path;
foreach (string element in filePaths)
{
    lb1.Items.Add(element);
}

1
你想要什么?文件夹中每个文件的文件名? - DonBoitnott
是的,只需要文件名。目前,当我使用Directory.GetFiles时,它会显示完整路径。 - Jimmy K
https://dev59.com/cGcs5IYBdhLWcg3w3HkG - Pacman
3个回答

1
你需要将Path.GetFileName应用于Directory.GetFiles返回的字符串。
private void button2_Click(object sender, EventArgs e) 
{ 
    string[] path = Directory.GetFiles(@"c:\Users\james.krueger\Desktop\Test Folder\");
    foreach (string element in path)
    {
        lb1.Items.Add(Path.GetFileName(element));
    }
}

Path.GetFileName不能返回目录中的文件名,只能从路径名中提取文件名部分。

然而,如果您的lb1是一个ListBox,您可以使用Linq非常紧凑的代码来实现您的结果。

string folder = @"c:\Users\james.krueger\Desktop\Test Folder\";
string[] files = Directory.EnumerateFiles(folder).Select(x => Path.GetFileName(x)).ToArray();
lb1.DataSource = files;

解决了,我太蠢了。谢谢 Steve。 - Jimmy K

1
Path.GetFileName(@"c:\Users\james.krueger\Desktop\Test Folder\")

返回一个string。编译器告诉你它无法将其分配给string[]

现在,GetFileName的作用是删除名称的路径部分,并仅返回文件名,因此它只是解决方案的一部分。您仍然需要调用Directory.GetFiles

因此,调用Directory.GetFiles,然后对由Directory.GetFiles返回的数组中的每个项目调用Path.GetFileName()。例如:

foreach (string name in Directory.GetFiles(dirName)
    .Select(path => Path.GetFileName(path)))
{
    lb1.Items.Add(name);
}

或者使用 IEnumerable<string> 而不是 string[] 的更有效率的版本:

foreach (string name in Directory.EnumerateFiles(dirName)
    .Select(path => Path.GetFileName(path)))
{
    lb1.Items.Add(name);
}

0

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