3

I've been able to get this code to work:

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

The problem is this displays the entire path.

This next block of code seems to be what I want. However, it prompts me with the error message that it cannot implicitly convert string to string[].

Any ideas on how to get the file name alone?

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

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

3 回答 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;
于 2014-03-12T16:02:16.503 回答
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);
}
于 2014-03-12T16:03:22.257 回答
0

Path.GetFileName()返回一个string not string[]

你会想用Directory.GetFiles()它来代替它。

于 2014-03-12T16:04:08.197 回答