基于多个选项筛选列表
问题描述:
我想基于特定文件扩展名从文件夹返回文件列表。基于多个选项筛选列表
此刻,我得到所有文件。我如何过滤某些类型?
此刻,我的代码看起来是这样的:
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,但不知道如何干净地处理多种类型。
答
您可以使用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();
答
您可以通过使用GetFiles()
功能做到这一点太
var files = d.GetFiles("*.mp4|*.mpg|*.avi|*.mpeg", SearchOptions.AllDirectories).ToList();
答
试过这样:
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);
}
}
我首先想到的是使用分号,但似乎并没有工作。我尝试管道,因为你建议,并得到“* ArgumentException:路径中的非法字符。*” – 2013-04-26 05:00:08