繁体   English   中英

特定多个文件夹中的DirectoryInfo.GetFiles()

[英]DirectoryInfo.GetFiles() from specific multiple folders

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

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

我只想列出folder1和folder3中的文件。 我目前正在使用以下代码,它返回〜/ docs /中的所有文件。

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

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

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
    }
}

作为一个额外的步骤,你甚至可以做到这一点在并行的foreach了。

您可以使用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)))

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

尽管其他答案也可以,但是我会一口气做到这一点。

 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
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM