rd4*_*d42 85 .net c# getfiles fileinfo
如何过滤多个分机?
我试过了:
FileInfo[] Files = dinfo.GetFiles("*.jpg;*.tiff;*.bmp");
FileInfo[] Files = dinfo.GetFiles("*.jpg,*.tiff,*.bmp");
Run Code Online (Sandbox Code Playgroud)
SLa*_*aks 66
您可以获取每个文件,然后过滤数组:
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));
}
Run Code Online (Sandbox Code Playgroud)
这将(略微)比这里的每个其他答案更快.
在.Net 3.5中,替换EnumerateFiles
为GetFiles
(速度较慢).
并像这样使用它:
var files = new DirectoryInfo(...).GetFilesByExtensions(".jpg", ".mov", ".gif", ".mp4");
Run Code Online (Sandbox Code Playgroud)
Che*_*hen 59
为什么不创建扩展方法?那更具可读性.
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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:更高效的版本:
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));
}
Run Code Online (Sandbox Code Playgroud)
用法:
DirectoryInfo dInfo = new DirectoryInfo(@"c:\MyDir");
dInfo.GetFilesByExtensions(".jpg",".exe",".gif");
Run Code Online (Sandbox Code Playgroud)
Tho*_*que 51
你不能这样做,因为GetFiles
只接受一个搜索模式.相反,您可以GetFiles
不使用模式调用,并在代码中过滤结果:
string[] extensions = new[] { ".jpg", ".tiff", ".bmp" };
FileInfo[] files =
dinfo.GetFiles()
.Where(f => extensions.Contains(f.Extension.ToLower()))
.ToArray();
Run Code Online (Sandbox Code Playgroud)
如果您正在使用.NET 4,则可以使用该EnumerateFiles
方法来避免一次性将所有FileInfo对象加载到内存中:
string[] extensions = new[] { ".jpg", ".tiff", ".bmp" };
FileInfo[] files =
dinfo.EnumerateFiles()
.Where(f => extensions.Contains(f.Extension.ToLower()))
.ToArray();
Run Code Online (Sandbox Code Playgroud)
Iev*_*ida 16
您可以使用LINQ Union方法:
dir.GetFiles("*.txt").Union(dir.GetFiles("*.jpg")).ToArray();
Run Code Online (Sandbox Code Playgroud)
以下内容检索jpg,tiff和bmp文件,并为您提供IEnumerable<FileInfo>
可以迭代的文件:
var files = dinfo.GetFiles("*.jpg")
.Concat(dinfo.GetFiles("*.tiff"))
.Concat(dinfo.GetFiles("*.bmp"));
Run Code Online (Sandbox Code Playgroud)
如果你真的需要一个阵列,那么就直接坚持.ToArray()
到底.
归档时间: |
|
查看次数: |
117827 次 |
最近记录: |