Path.GetFilename - 尝试从目录中获取文件名

时间:2014-03-12 15:58:13

标签: c# directory getfiles

我已经能够使用此代码:

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);
}

3 个答案:

答案 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()代替此。