C# 使用C匹配字符串(大多数字符)#
我有一个文件夹结构(有时-表示一个文件夹,文件夹中的文件夹缩进) 我得到了一个字符串值“D130202”来匹配正确的文件夹,我使用的是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”,但由于有数千个文件夹,所以搜索所有其他文件夹中的每个
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*谢谢,迈克