我有一个巨大的目录,我需要从包括子目录中检索文件。
我的文件是包含各种文件的文件夹,但我只对以 7 位长度的扩展名命名的特定专有文件感兴趣。
例如,我有一个包含以下文件的文件夹:
abc.txt
def.txt
GIWFJ1XA.0201000
GIWFJ1UC.0501000
NOOBO0XA.0100100
summary.pdf
someinfo.zip
T7F4JUXA.0300600
vxy98796.csv
YJHLPLBO.0302300
YJHLPLUC.0302800
我尝试了以下方法:
var fileList = Directory.GetFiles(someDir, "*.???????", SearchOption.AllDirectories)
并且
string searchSting = string.Empty;
for (int j = 0; j < 9999999; j++)
{
searchSting += string.Format(", *.{0} ", j.ToString("0000000"));
}
var fileList2 = Directory.GetFiles(someDir, searchSting, SearchOption.AllDirectories);
哪个错误是因为字符串显然太长了。
我只想返回具有指定扩展名长度的文件,在这种情况下,为 7 位数字,以避免必须循环处理我必须处理的数千个数字。
我考虑为搜索条件创建一个变量字符串,该字符串将包含所有 99,999,999 个可能的数字,但 d
我怎样才能做到这一点?
我不相信有一种方法可以在不遍历目录及其子文件夹中的文件的情况下做到这一点。的搜索模式GetFiles
不支持正则表达式,所以我们不能真正使用类似的东西[\d]{7}
作为过滤器。我建议使用Directory.EnumerateFiles
然后返回符合您条件的文件。
您可以使用它来枚举文件:
private static IEnumerable<string> GetProprietaryFiles(string topDirectory)
{
Func<string, bool> filter = f =>
{
string extension = Path.GetExtension(f);
// is 8 characters long including the .
// all remaining characters are digits
return extension.Length == 8 && extension.Skip(1).All(char.IsDigit);
};
// EnumerateFiles allows us to step through the files without
// loading all of the filenames into memory at once.
IEnumerable<string> matchingFiles =
Directory.EnumerateFiles(topDirectory, "*", SearchOption.AllDirectories)
.Where(filter);
// Return each file as the enumerable is iterated
foreach (var file in matchingFiles)
{
yield return file;
}
}
Path.GetExtension
包括 the.
所以我们检查包括 the 在内的字符数.
是 8,并且所有剩余的字符都是数字。
用法:
List<string> fileList = GetProprietaryFiles(someDir).ToList();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句