我有一个文件夹结构( - 有时表示文件夹,文件夹中的文件夹缩进)
我给了一个字符串值“D130202”来匹配正确的文件夹,我正在使用C#的System.IO.Directory.GetDirectories(@"c:\", "", SearchOption.TopDirectoryOnly);
我不知道将什么放入搜索模式的空字符串中。
在此之前,我使用SearchOption.AllDirectories
搜索所有文件夹,直到我匹配“D130202”,但由于有数千个文件夹,因此需要花费很长时间浏览所有其他文件夹中的每个文件夹。
我希望一旦匹配该值就从D搜索,程序进入另一个文件夹,找到D13,匹配该值,进入D1302文件夹等等,而不必不必要地搜索所有其他文件夹。
但我想不出我会怎么做。
非常感谢任何帮助。
答案 0 :(得分:0)
您必须递归搜索 TopDirectoryOnly
:
public string SearchNestedDirectory(string path, string name)
{
if (string.IsNullOrEmpty(name))
throw new ArgumentException("name");
return SearchNestedDirectoryImpl(path, name);
}
private string SearchNestedDirectoryImpl(string path, string name, int depth = 1)
{
if (depth > name.Length)
return null;
var result = Directory.GetDirectories(path, name.Substring(0, depth)).FirstOrDefault();
if (result == null)
return SearchNestedDirectoryImpl(path, name, depth + 1);
if (result != null && Regex.Replace(result, @".+\\", "") == name)
return result;
return SearchNestedDirectoryImpl(result, name, depth + 1);
}
用法:
SearchNestedDirectory(@"c:\", "D130202");
返回:路径,如果找不到路径,则返回null
。
编辑:修复了子文件夹长度增加超过1
时出现的问题答案 1 :(得分:0)
将D130202的路径构建为(以C:\为根): C:\ D \ D13 \ D1302 \ D130202