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

时间:2014-08-22 09:51:42

标签: c# asp.net directoryinfo

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

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

3 个答案:

答案 0 :(得分:1)

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

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中执行此操作。

答案 1 :(得分: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 :(得分:1)

虽然其他答案也有效,但我会一下子就这样做..

 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
 }