使用C#

时间:2017-03-22 20:16:00

标签: c# regex string pattern-matching

我有一个文件夹结构( - 有时表示文件夹,文件夹中的文件夹缩进)

enter image description here

我给了一个字符串值“D130202”来匹配正确的文件夹,我正在使用C#的System.IO.Directory.GetDirectories(@"c:\", "", SearchOption.TopDirectoryOnly);

我不知道将什么放入搜索模式的空字符串中。 在此之前,我使用SearchOption.AllDirectories搜索所有文件夹,直到我匹配“D130202”,但由于有数千个文件夹,因此需要花费很长时间浏览所有其他文件夹中的每个文件夹。

我希望一旦匹配该值就从D搜索,程序进入另一个文件夹,找到D13,匹配该值,进入D1302文件夹等等,而不必不必要地搜索所有其他文件夹。

但我想不出我会怎么做。

非常感谢任何帮助。

2 个答案:

答案 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)

我会使用Directory.Exists(path)

将D130202的路径构建为(以C:\为根): C:\ D \ D13 \ D1302 \ D130202