1

特定のファイル拡張子に基づいて、フォルダーからファイルのリストを返したいです。

現時点では、すべてのファイルを取得しています。特定のタイプを除外するにはどうすればよいですか?

現時点では、私のコードは次のようになります。

public static List<FileInfo> BuildListOfFiles()
{
    var d = new DirectoryInfo(Constants.FolderToMonitor);
    if (d.Exists)
    {
        var files = (from file in d.EnumerateFiles() select file).ToList();
        return files;
    }
    return null;

}

でも欲しいだけ

*.mp4、*.mpg、*.avi、*.mpeg

別の .Where が必要だと思いますが、複数の型をきれいに処理する方法がわかりません。

4

3 に答える 3

4

Linq を使用してフィルタリングを行うことができます。

var searchExtensions = new string[] { ".mp4", ".mpg", ".avi", ".mpeg" };
var files = d.EnumerateFiles()
             .Where(f => searchExtensions.Contains(Path.GetExtension(file))
             .ToList();

またはクエリ構文で:

var searchExtensions = new string[] { ".mp4", ".mpg", ".avi", ".mpeg" };
var files = 
    (from file in d.EnumerateFiles()
     where searchExtensions.Contains(Path.GetExtension(file))
     select file)
    .ToList();

別の解決策は、ファイル リストをフィルタリングするのではなく、ファイル リストを作成することです。

var searchPatterns = new string[] { "*.mp4", "*.mpg", "*.avi", "*.mpeg" };
var files = searchPatterns.SelectMany(p => d.EnumerateFiles(p))
                          .ToList();

またはクエリ構文で:

var searchPatterns = new string[] { "*.mp4", "*.mpg", "*.avi", "*.mpeg" };
var files = 
    (from pattern in searchPatterns
     from file in d.EnumerateFiles(pattern))
     select file)
    .ToList();
于 2013-04-26T04:48:36.260 に答える
-1

GetFiles()関数を使用してこれを行うこともできます

var files = d.GetFiles("*.mp4|*.mpg|*.avi|*.mpeg", SearchOptions.AllDirectories).ToList();
于 2013-04-26T04:55:22.653 に答える