我正在使用此代码
private IEnumerable<String> FindAccessableFiles(string path, string file_pattern, bool recurse)
{
IEnumerable<String> emptyList = new string[0];
if (File.Exists(path))
return new string[] { path };
if (!Directory.Exists(path))
return emptyList;
var top_directory = new DirectoryInfo(path);
// Enumerate the files just in the top directory.
var files = top_directory.EnumerateFiles(file_pattern);
var filesLength = files.Count();
var filesList = Enumerable
.Range(0, filesLength)
.Select(i =>
{
string filename = null;
try
{
var file = files.ElementAt(i);
filename = file.FullName;
}
catch (UnauthorizedAccessException)
{
}
catch (InvalidOperationException)
{
// ran out of entries
}
return filename;
})
.Where(i => null != i);
if (!recurse)
return filesList;
var dirs = top_directory.EnumerateDirectories("*");
var dirsLength = dirs.Count();
var dirsList = Enumerable
.Range(0, dirsLength)
.SelectMany(i =>
{
string dirname = null;
try
{
var dir = dirs.ElementAt(i);
dirname = dir.FullName;
return FindAccessableFiles(dirname, file_pattern, recurse);
}
catch (UnauthorizedAccessException)
{
}
catch (InvalidOperationException)
{
// ran out of entries
}
return emptyList;
});
return Enumerable.Concat(filesList, dirsList);
}
我在遍历包含 100k+ 个文件的文件夹时遇到了一些性能问题——我在枚举它们时忽略了所有图像。
我正在尝试弄清楚如何将它们从枚举列表中排除,以便它们从一开始就不会被处理,但无法弄清楚如何去做。
我有一个List<String>
我想排除的扩展名,并在代码中使用Contains
.
如果我首先将它们排除在外,我会获得性能提升FindAccessableFiles
吗?我该怎么做?如果文件扩展名包含在扩展名列表中,我最初的尝试是抛出异常,但我确信这不是最好的方法。
的目的FindAccessableFiles
是生成一个文件列表,以规避在GetFiles()
尝试访问引发权限错误的文件时引发异常的问题。