可能重复:
Can you call Directory.GetFiles() with multiple filters?
如何过滤多个分机?
我试过了:
FileInfo[] Files = dinfo.GetFiles("*.jpg;*.tiff;*.bmp");
FileInfo[] Files = dinfo.GetFiles("*.jpg,*.tiff,*.bmp");发布于 2010-08-20 10:15:09
为什么不创建一个扩展方法呢?这更具可读性。
public static IEnumerable<FileInfo> GetFilesByExtensions(this DirectoryInfo dir, params string[] extensions)
{
if (extensions == null)
throw new ArgumentNullException("extensions");
IEnumerable<FileInfo> files = Enumerable.Empty<FileInfo>();
foreach(string ext in extensions)
{
files = files.Concat(dir.GetFiles(ext));
}
return files;
}编辑:更高效的版本:
public static IEnumerable<FileInfo> GetFilesByExtensions(this DirectoryInfo dir, params string[] extensions)
{
if (extensions == null)
throw new ArgumentNullException("extensions");
IEnumerable<FileInfo> files = dir.EnumerateFiles();
return files.Where(f => extensions.Contains(f.Extension));
}用法:
DirectoryInfo dInfo = new DirectoryInfo(@"c:\MyDir");
dInfo.GetFilesByExtensions(".jpg",".exe",".gif");发布于 2010-11-08 21:53:58
您可以获取每个文件,然后过滤数组:
public static IEnumerable<FileInfo> GetFilesByExtensions(this DirectoryInfo dirInfo, params string[] extensions)
{
var allowedExtensions = new HashSet<string>(extensions, StringComparer.OrdinalIgnoreCase);
return dirInfo.EnumerateFiles()
.Where(f => allowedExtensions.Contains(f.Extension));
}这将比这里的所有其他答案(略微)快。
在.Net 3.5中,将EnumerateFiles替换为GetFiles (速度较慢)。
并像这样使用它:
var files = new DirectoryInfo(...).GetFilesByExtensions(".jpg", ".mov", ".gif", ".mp4");发布于 2010-08-20 08:12:14
您不能这样做,因为GetFiles只接受一个搜索模式。相反,您可以在不使用模式的情况下调用GetFiles,并在代码中过滤结果:
string[] extensions = new[] { ".jpg", ".tiff", ".bmp" };
FileInfo[] files =
dinfo.GetFiles()
.Where(f => extensions.Contains(f.Extension.ToLower()))
.ToArray();如果您使用的是.NET 4,则可以使用EnumerateFiles方法来避免一次性加载内存中的所有FileInfo对象:
string[] extensions = new[] { ".jpg", ".tiff", ".bmp" };
FileInfo[] files =
dinfo.EnumerateFiles()
.Where(f => extensions.Contains(f.Extension.ToLower()))
.ToArray();https://stackoverflow.com/questions/3527203
复制相似问题