【问题标题】:How to get files from a specific sub-directories using c#?如何使用 c# 从特定子目录中获取文件?
【发布时间】:2018-04-03 12:00:55
【问题描述】:

我正在尝试将名为 abcd 的子目录中的所有 *.html 文件放入一个数组中。 给定的路径可以包含多个子目录甚至根目录中的多个 *.html 文件(即直接在用户给定路径内),但我只想要那些在特定命名的子目录内的 *.html 文件(abcd) 使用 LINQ。 这是我尝试过的

string workingPath = @"D:\Testing";  
            string[] myFiles = workingPath.Select(dirs => Directory.GetDirectories(workingPath)  
                                           .Select(folders => (from item in Directory.GetDirectories(folders, "abcd", SearchOption.AllDirectories)  
                                                               .Select(item => Directory.GetFiles(item, "*.html"))  
                                                              )));

我遇到了一个错误

查询正文必须以 select 子句或 group 子句结尾 (CS0742)

。我该如何解决这个问题?

【问题讨论】:

  • 子目录可以嵌套吗?
  • @Enigmativity 是的。

标签: c# linq


【解决方案1】:

您的代码看起来无法编译。从 workingPath.Select 开始将返回一个字符集合,而您正尝试再次对其进行迭代,考虑到您的要求,这没有意义。

你需要这样的东西

var files = new List<string>();
if (Directory.Exists(workingPath))
{
   foreach (var f in Directory.GetDirectories(workingPath, "abcd",
                                                SearchOption.AllDirectories))
   {
       files.AddRange(Directory.GetFiles(f, "*.html"));
   }
}

你也可以使用 LINQ 做一个单行

var files2 = Directory.GetDirectories(workingPath, "abcd", SearchOption.AllDirectories)
                     .SelectMany(d => Directory.GetFiles(d, "*.html")).ToArray();

【讨论】:

  • 不应该是files.AddRange(Directory.GetFiles(f, "*.html"));而不是files.AddRange(Directory.GetFiles(folder, "*.html"));
  • 是的。这是一个错字。试图节省空间,但错过了第二行。
  • @Shjyu 可以使用 LINQ 在一行代码中完成吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2013-11-28
  • 1970-01-01
相关资源
最近更新 更多