3

このコードを機能させることができました:

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

3 に答える 3

1

Directory.GetFiles によって返された文字列に Path.GetFileName を適用します。

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 に答える