【问题标题】:Get all sub directories that only contain files获取所有只包含文件的子目录
【发布时间】:2010-03-09 09:44:39
【问题描述】:

我有一个路径,我想列出它下面的子目录,其中每个子目录不包含任何其他目录。 (仅限那些不包含文件夹的子目录,而只有文件。)

有什么聪明的方法吗?

【问题讨论】:

  • 恐怕我根本看不懂括号里的那一段——你能改写一下吗?

标签: c# .net


【解决方案1】:

据我了解,您希望在给定路径下列出仅包含文件的子目录。


static IEnumerable<string> GetSubdirectoriesContainingOnlyFiles(string path)
{
  return from subdirectory in Directory.GetDirectories(path, "*", SearchOption.AllDirectories)
         where Directory.GetDirectories(subdirectory).Length == 0
        select subdirectory;
}

【讨论】:

  • 我知道这个问题已经 3 年了,但你能解释一下它是如何工作的吗?因为这是我正在寻找的确切答案。我只是想确保我理解代码。
  • 对于没有子目录的目录,Directory.GetDirectories(subdirectory) 将返回一个空的string[],它的Length0。因此,我们只选择符合该标准的目录来抓取仅包含文件的目录(但也可能没有文件)。
  • 很棒的 LINQ 用法!也许您可以使用where !Directory.GetDirectories(subdirectory).Any() 而不是where Directory.GetDirectories(subdirectory).Length == 0 使含义更清晰:)
【解决方案2】:

DirectoryInfo

DirectoryInfo dInfo = new DirectoryInfo(<path to dir>);
DirectoryInfo[] subdirs = dInfo.GetDirectories();

【讨论】:

    【解决方案3】:

    您可以使用Directory.GetDirectories 方法。

    但是我不确定我是否正确理解了您的问题...您能澄清一下吗?

    【讨论】:

      【解决方案4】:

      基于哈佛的回答,但略短一些(可能更容易阅读,因为它使用!Subdirs.Any() 而不是Subdirs.Length == 0):

      static IEnumerable<string> GetSubdirectoriesContainingOnlyFiles(string path)
      {
         return Directory.GetDirectories(path, "*", SearchOption.AllDirectories)
                .Where( subdir => !Directory.GetDirectories(subdir).Any() );
      }
      

      还要注意,这需要using System.Linq; 才能工作,因为它使用 LINQ 查询语言。 (当然还有using System.IO; Directory 类:))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-05
        • 1970-01-01
        • 1970-01-01
        • 2012-08-19
        • 2011-03-04
        相关资源
        最近更新 更多