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 回答
0

试过这样:

    List<FileInfo> mediaFiles = new List<FileInfo>();

    foreach (string file in Directory.GetFiles(path))
    {
        FileInfo matchFiles = new FileInfo(file);

        if ((matchFiles.Extension == ".mp4") || (matchFiles.Extension == ".mpg") || (matchFiles.Extension == ".avi") || (matchFiles.Extension == ".mpeg"))
        {
            mediaFiles.Add(matchFiles);
        }
    }
于 2013-04-26T05:12:24.343 回答
-1

你也可以通过使用GetFiles()函数来做到这一点

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