私はこのコードを使用しています
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);
}
100,000 個以上のファイルが含まれるフォルダーを繰り返し処理する際に、いくつかのパフォーマンスの問題が発生しています。それらを列挙するときに無視するすべての画像です。
列挙されたリストからそれらを除外する方法を考え出そうとしているので、そもそも処理されませんが、その方法はわかりません。
List<String>
除外したい拡張子があり、を使用してコードでこれを行いますContains
。
FindAccessableFiles
そもそもそれらを除外した場合、パフォーマンスは向上しますか?また、どのように行うのですか? 私の最初の試みは、ファイル拡張子が拡張子リストに含まれている場合に例外をスローすることでしたが、これが最善の方法ではないと確信しています。
の目的は、許可エラーをスローしたファイルにアクセスしようとして例外をスローするFindAccessableFiles
問題を回避したファイルのリストを作成することです。GetFiles()