【问题标题】:DirectoryInfo.GetFiles() from specific multiple folders来自特定多个文件夹的 DirectoryInfo.GetFiles()
【发布时间】:2014-08-22 09:51:42
【问题描述】:

有没有一种简单的方法可以从特定的多个文件夹而不是所有目录中获取文件信息。我有以下文件结构:

~/docs/folder1/
~/docs/folder2/
~/docs/folder3/

我只想列出文件夹 1 和文件夹 3 中的文件。我目前正在使用以下内容,它返回 ~/docs/ 中的所有文件。

DirectoryInfo info = new DirectoryInfo(HttpContext.Current.Server.MapPath("~/docs/"));
foreach (var fi in info.GetFiles("*", SearchOption.AllDirectories))
{
//do stuff with files                  
}

【问题讨论】:

  • 除了直接指定文件夹,没有。
  • 只为 2 个文件夹运行 GetFiles 而不仅仅是根目录?

标签: c# asp.net directoryinfo


【解决方案1】:

您可以使用 LINQ 过滤结果:

var folderNames = new[] { "folder1", "folder2" };
foreach (var fi in info.GetFiles("*", SearchOption.AllDirectories)
                       .Where(x => folderNames.Contains(x.Directory.Name)))

或者您可以首先使用 LINQ 获取结果:

var folderPaths = new[] {"~/docs/folder1/", "~/docs/folder3/"};
foreach (var fi in folderpaths
                     .SelectMany(x => 
                      new DirectoryInfo(HttpContext.Current.Server.MapPath(x))
                            .GetFiles("*", SearchOption.AllDirectories)))

免责声明:这些不会产生相同的结果。如果您可以更具体地了解您想要的文件(包括/不包括子目录等),我可以更具体地了解查询。

【讨论】:

    【解决方案2】:

    无耻地复制了您的原始代码,并添加了一些建议。 基本上,如果您知道要处理哪些文件夹(或者即使它由用户输入确定),则将它们存储在一个列表中并对其进行迭代。

    List<String> folders = new List<String> { "Folder1", "Folder3" };
    foreach(var folder in folders)
    {
        String rootDir = "~/docs/";
        StringBuilder sb = new StringBuilder();
        String find = sb.AppendFormat("{0}{1}/", rootDir, folder).ToString();
        DirectoryInfo info = new DirectoryInfo(HttpContext.Current.Server.MapPath(find));
        foreach (var fi in info.GetFiles("*", SearchOption.AllDirectories))
        {
            //do stuff with files
        }
    }
    

    作为一个额外的步骤,您可以甚至在parallel foreach 中也这样做。

    【讨论】:

      【解决方案3】:

      虽然其他答案也可以,但我会一口气这样做..

       var directories = Directory.GetDirectories("~/docs/", "*.*", SearchOption.AllDirectories);
       foreach (var files in from directory in dirs where directory.Contains("Folder2") == false select Directory.GetFiles(directory))
       {
          List<String> filesList = files.ToList();
        // Do Something with your files
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-22
        • 2015-12-25
        • 1970-01-01
        • 2017-11-04
        • 1970-01-01
        相关资源
        最近更新 更多