为什么该方法不从主目录返回文件,以及我如何指定多个扩展名
本文关键字:何指定 扩展名 方法 主目录 文件 返回 为什么 | 更新日期: 2023-09-27 18:27:16
这是我的方法中的代码:
t = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
string[] textfiles = ApplyAllFiles(t, "*.txt", ProcessFile).ToArray();
然后我也做了:
s = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
string[] textfiles = ApplyAllFiles(s, "*.jpg", ProcessFile).ToArray();
以及ApplyAllFiles方法:
static void ProcessFile(string path) {/* ... */}
static IEnumerable<string> ApplyAllFiles(string folder, string searchPattern, Action<string> fileAction)
{
IEnumerable<string> files = Directory.GetFiles(folder, searchPattern);
foreach (string file in files)
{
fileAction(file);
}
foreach (string subDir in Directory.GetDirectories(folder))
{
try
{
files = files.Concat(ApplyAllFiles(subDir, searchPattern, fileAction));
}
catch
{
// swallow, log, whatever
}
}
return files;
}
它没有从主目录中获取文件,例如第一个主目录是:C: ''Users''bout_000''Documents我在这个目录里有一些文本文件。它将从sub
获取所有文本文件目录,但它永远不会获得C:''Users''bout_000''Documents 中的文本文件我怎么能得到多个扩展名?例如,我做了"*.jpg",但我也想得到bmp文件、png文件和gif文件。
为什么不直接使用SearchOption.AllDirectories
?那么您就不需要Concat
或递归了。你可以说
static void ApplyAllFiles(string folder, string searchPattern, Action<string> fileAction)
{
foreach (string file in Directory.GetFiles(folder, searchPattern, SearchOption.AllDirectories))
fileAction(file);
}
这是有问题的过载。或者您可以使用EnumerateFiles
。
不幸的是,searchPattern
参数不支持多个扩展模式,所以您必须自己完成。类似这样的东西:
static void ApplyAllFiles(string folder, Action<string> fileAction)
{
foreach (string file in
Directory
.EnumerateFiles(folder, "*", SearchOption.AllDirectories)
.Where(f => new[] {".jpg", ".txt"}.Contains(Path.GetExtension(f))))
fileAction(file);
}