【发布时间】:2010-03-09 09:44:39
【问题描述】:
我有一个路径,我想列出它下面的子目录,其中每个子目录不包含任何其他目录。 (仅限那些不包含文件夹的子目录,而只有文件。)
有什么聪明的方法吗?
【问题讨论】:
-
恐怕我根本看不懂括号里的那一段——你能改写一下吗?
我有一个路径,我想列出它下面的子目录,其中每个子目录不包含任何其他目录。 (仅限那些不包含文件夹的子目录,而只有文件。)
有什么聪明的方法吗?
【问题讨论】:
据我了解,您希望在给定路径下列出仅包含文件的子目录。
static IEnumerable<string> GetSubdirectoriesContainingOnlyFiles(string path)
{
return from subdirectory in Directory.GetDirectories(path, "*", SearchOption.AllDirectories)
where Directory.GetDirectories(subdirectory).Length == 0
select subdirectory;
}
【讨论】:
Directory.GetDirectories(subdirectory) 将返回一个空的string[],它的Length 是0。因此,我们只选择符合该标准的目录来抓取仅包含文件的目录(但也可能没有文件)。
where !Directory.GetDirectories(subdirectory).Any() 而不是where Directory.GetDirectories(subdirectory).Length == 0 使含义更清晰:)
DirectoryInfo dInfo = new DirectoryInfo(<path to dir>);
DirectoryInfo[] subdirs = dInfo.GetDirectories();
【讨论】:
您可以使用Directory.GetDirectories 方法。
但是我不确定我是否正确理解了您的问题...您能澄清一下吗?
【讨论】:
基于哈佛的回答,但略短一些(可能更容易阅读,因为它使用!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 类:))
【讨论】: