我已经能够使用此代码:
string[] path = Directory.GetFiles(@"c:\Users\james.krueger\Desktop\Test Folder\");
问题是这显示了整个路径。
下一段代码似乎就是我想要的。但是,它会提示我错误消息,它无法将string
隐式转换为string[]
。
有关如何单独获取文件名的任何想法?
string[] path = Path.GetFileName(@"c:\Users\james.krueger\Desktop\Test Folder\");
string[] filePaths = path;
foreach (string element in filePaths)
{
lb1.Items.Add(element);
}
答案 0 :(得分: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;
答案 1 :(得分: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);
}
答案 2 :(得分:0)
Path.GetFileName()
返回string
而非 string[]
。
您需要使用Directory.GetFiles()
代替此。