C# 使用C匹配字符串(大多数字符)#

C# 使用C匹配字符串(大多数字符)#,c#,regex,string,pattern-matching,C#,Regex,String,Pattern Matching,我有一个文件夹结构(有时-表示一个文件夹,文件夹中的文件夹缩进) 我得到了一个字符串值“D130202”来匹配正确的文件夹,我使用的是C#的System.IO.Directory.GetDirectories(@“C:\”,“”,SearchOption.TopDirectoryOnly) 我不知道该在搜索模式的空字符串中输入什么。 以前,我使用SearchOption.AllDirectories搜索所有文件夹,直到匹配“D130202”,但由于有数千个文件夹,所以搜索所有其他文件夹中的每个

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

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

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

我希望在匹配该值后立即从D开始搜索,程序进入另一个文件夹,找到D13,匹配该值,进入D1302文件夹,等等,而不必在所有其他文件夹中进行不必要的搜索

但我想不出我会怎么做

任何帮助都将不胜感激。

您只需递归搜索
TopDirectory

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时出现的问题


从D130202作为(使用C:\as根目录)构建路径:C:\D\D13\D1302\D130202

如何处理文件夹
D1
?它似乎与缩进模式不匹配。此外,嵌套文件夹是否总是比其父文件夹多包含2个字符?无论如何,答案是:在方法调用中没有可以使用的搜索模式。你将不得不一次一级地在文件夹中递归。当你使用
D*
作为搜索模式并搜索所有文件夹时会发生什么情况?对不起,它的ME86有一个拼写错误,我应该将D10而不是D1。我来看看用D*谢谢,迈克