0

これは以下の私のコードです。すべての画像ファイル拡張子を検索するフィルターを既に作成しましたが、コードを実行SearchOption.AllDirectoriesすると、すべてのディレクトリを検索するのではなく、特定のパスを開こうとしているように見えます。

ここで私が間違っていた場所について誰か助けてくれますか?

string[] filters = { "*.jpg", "*.jpeg", "*.png", "*.gif", "*.bmp" };
var directory = new DirectoryInfo(lblText.Text);
var files = new List<FileInfo>();

foreach (var filter in filters)
{
    var results = directory.GetFiles(filter, SearchOption.AllDirectories);
    files.AddRange(results);
}

助けてくれてありがとう!:)

4

2 に答える 2

2

directoryはオブジェクトであり、このオーバーロードをDirectoryInfo使用していると思います。次に、指定された検索パターンに一致し、すべてのサブディレクトリを検索する現在のディレクトリからaが返されます。GetFilesFileInfo[]

したがって、のディレクトリ パスはDirectoryInfoルート ディレクトリです。

例えば:

DirectoryInfo imageDir = new DirectoryInfo(@"c:\Images");
FileInfo[] allJPGImages = imageDir.GetFiles(".jpg",  SearchOption.AllDirectories);

編集に従って編集します。

したがって、特定のパスは にText入力/表示されlblTextます。これらの拡張子を持つすべてのファイルを取得する別の方法:

string[] filters = { "*.jpg", "*.jpeg", "*.png", "*.gif", "*.bmp" };
List<FileInfo> files = filters
    .SelectMany(filter => directory.EnumerateFiles(filter, System.IO.SearchOption.AllDirectories))
    .ToList();

処理を開始するまで、すべてのファイルをメモリにロードする必要はありません。多くのファイルやディレクトリを操作している場合は、EnumerateFilesより効率的です。

于 2013-10-24T14:54:47.513 に答える