web-dev-qa-db-ja.com

Directory.GetFiles:フルパスではなくファイル名のみを取得する方法は?

可能性のある複製:
c#?を使用してディレクトリ内のファイル名のみを取得する方法

C#を使用して、フォルダー内のファイルの一覧を取得します。
私の目標:["file1.txt", "file2.txt"]

だから私はこれを書いた:

string[] files = Directory.GetFiles(dir);

残念ながら、次の出力が表示されます:["C:\\dir\\file1.txt", "C:\\dir\\file2.txt"]

不要な「C:\ dir \」部分を後で削除できますが、よりエレガントな解決策はありますか?

61
Nicolas Raoul

これを行うには、System.IO.Path.GetFileNameを使用できます。

例えば。、

string[] files = Directory.GetFiles(dir);
foreach(string file in files)
    Console.WriteLine(Path.GetFileName(file));

FileInfoを使用することもできますが、既に使用しているアプローチ(ファイルパスを取得するだけ)よりもはるかに重いです。したがって、GetFilesクラスの追加機能が必要でない限り、FileInfoを使用することをお勧めします。

138
RedFilter

試して、

  string[] files =  new DirectoryInfo(dir).GetFiles().Select(o => o.Name).ToArray();

上記の行はUnauthorizedAccessExceptionをスローする場合があります。このチェックアウトを処理するには、以下のリンクをご覧ください

C#Handle LINQのSystem.UnauthorizedAccessException

28
Jignesh Thakker

FileInfo.Name Property を使用して見てください

何かのようなもの

string[] files = Directory.GetFiles(dir); 

for (int iFile = 0; iFile < files.Length; iFile++)
    string fn = new FileInfo(files[iFile]).Name;

DirectoryInfo Class および FileInfo Class の使用方法もご覧ください

8
Adriaan Stander

これを使用して、ファイル名のみを取得します。

Path.GetFileName(files[0]);
3
Osiris