为什么该方法不从主目录返回文件,以及我如何指定多个扩展名

本文关键字:何指定 扩展名 方法 主目录 文件 返回 为什么 | 更新日期: 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;
}
  1. 它没有从主目录中获取文件,例如第一个主目录是:C: ''Users''bout_000''Documents我在这个目录里有一些文本文件。它将从sub
    获取所有文本文件目录,但它永远不会获得C:''Users''bout_000''Documents 中的文本文件

  2. 我怎么能得到多个扩展名?例如,我做了"*.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);
}