我看到的每个示例似乎都是递归地获取子目录中的文件,只使用文件。我要做的是在文件夹中搜索一个名为"xxx“的特定子目录,然后将该路径保存到一个变量中,这样我就可以将其用于其他用途。
在不遍历所有目录并按名称进行比较的情况下,这是可能的吗?
发布于 2010-04-01 14:07:00
井
Directory.GetDirectories(root);
将返回子目录的数组。
然后,您可以使用Linq查找您感兴趣的内容:
IEnumerable<string> list = Directory.GetDirectories(root).Where(s => s.Equals("test"));
这在你的代码中不是一个循环,但仍然是一个循环。所以最终的答案是“不,你不能在不循环的情况下找到文件夹'test‘”。
您可以将测试添加到Linq中,但这取决于如果找不到您的“.SingleOrDefault()
”文件夹时您想要做什么。
如果您将GetDirectories
调用更改为包含SearchOption SearchOption.AllDirectories
,那么它也会为您执行递归。这个版本支持搜索-你必须提供一个搜索字符串-尽管在.NET框架中它是大小写敏感的搜索。要返回所有子目录,您需要传递"*"
作为搜索条件。
显然,在这种情况下,如果目录树中有多个名为"test“的文件夹,则调用可能会返回多个项目。
发布于 2013-06-03 08:19:53
var foldersFound = Directory.GetDirectories(root, "test", SearchOption.AllDirectories)
这将返回一个字符串数组,其中包含使用给定名称找到的所有文件夹。您可以更改最后一个参数,使其仅检查顶级目录,并且您可以更改root以调整其起始位置。
发布于 2010-04-01 14:14:40
首先,“不,如果不循环所有目录并按名称进行比较,这是不可能的”。
我相信你真正的问题是“有没有一个现有的API可以为我处理遍历所有目录和按名称进行比较?”
是的,有。它被称为Directory.Exists()
var xxxPath = Path.Combine(parentFolder, "xxx");
if (Directory.Exists(xxxPath))
savedPath = xxxPath;
https://stackoverflow.com/questions/2560876
复制