2010-03-09 114 views
7

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

任何明智的方式吗?

+3

恐怕我不明白在括号中的位 - 你可以尝试重写它吗? –

回答

21

这是我的理解是要在下面列出一个给定的路径只包含文件的子目录。


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

我知道这个问题是3岁,但你能解释这是如何工作的吗?因为这是我正在寻找的确切答案。我只是想确保我理解代码。 – webdad3

+0

具体是.Length == 0部分。我应该怎么读? – webdad3

+2

对于没有子目录的目录,'Directory.GetDirectories(子目录)'将返回一个空的'string []',它的'Length'为'0'。因此,我们只挑选符合该标准的目录来获取仅包含文件的目录(尽管也可能没有文件)。 –

1

您可以使用Directory.GetDirectories方法。

但是我不确定我是否正确理解你的问题......你能澄清吗?

16

DirectoryInfo

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

基于哈佛的回答,但有点短(可能稍微容易读,因为它使用的!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类:))

相关问题