如何使用GetDirectories搜索数字目录名称C#
我正在编写代码以从名称为“1”,“2”,“3”,“4”等的输出文件夹中获取子目录(即sub只有数名目录)如何使用GetDirectories搜索数字目录名称C#
例如: 这是我的输出文件夹:C:\用户\某某\桌面\输出
我想子目录与名称
“1 “,”2“,”3“,”4“
输出:
C:\用户\ XYZ \桌面\输出\ A \ A1 \ 1
C:\用户\ XYZ \桌面\输出\ A \ A1 \ 2
C:\ Users \ xyz \ Desktop \ Output \ A \ A1 \ 3
C:\ Users \ xyz \ Desktop \ Output \ A \ A1 \ 4
C:\ Users \ xyz \ Desktop \ Output \ A \ A2 \ 1
C:\ Users \ xyz \ Desktop \ Output \ A \ A2 \ 2
在我的代码中,我尝试使用搜索模式,但无法找到所需的输出:
这里是片段,它可以获取所有名称为“1”
string[] destDir1 = Directory.GetDirectories(
destinationFolderPath,
"1",
SearchOption.AllDirectories);
的子目录因此,为了获得所有与名称为“1”的目录, “2”,“3”和“4”我使用方括号的通配符如下,这是行不通的。
string[] destDir1 = Directory.GetDirectories(
destinationFolderPath,
"[0-9]",
SearchOption.AllDirectories);
我跟着msdn link以获取搜索模式更多的选择通配符
有什么不对这个逻辑?
用正则表达式,你可以这样做:
List<string> destDir1 = Directory.GetDirectories(folderPath, "*",
SearchOption.AllDirectories)
.Where(f => Regex.IsMatch(f, @"[\\/]\d+$")).ToList();
[\/]\d+$
匹配一个文件夹中有/或\([\\/]
)通过在一端或更多(+
)数字(\d
)跟随($
)。
上面的代码返回List<string>
,每串有最后一部分是一个数字,即:D:\folder\1234
,但不匹配D:\folder\aaa111
要包含有一部分是内部号(末尾不是必要的)的所有文件夹,即
D:\1\folder
,使用下面的代码:
List<string> destDir1 = Directory.GetDirectories(folderPath, "*",
SearchOption.AllDirectories)
.Where(f => Regex.IsMatch(f, @"[\\/]\d+[\\/$]")).ToList();
它将匹配文件夹一样D:\1234\child
,D:\child\1234
,但不匹配D:\aaa111\child
您发布的msdn链接是用于Visual Studio中的搜索模式(您在代码文件中搜索时使用的那些)。
不支持(正常DOS)*
和?
(GetDirectories
)以外的(正则表达式)搜索模式或通配符。
因此,您可能必须枚举所有目录并在代码中检查其名称。
是searchPattern可以是文字和通配符的组合,但不支持正则表达式。 searchPattern中允许使用以下通配符说明符。
...
*(星号)该位置的零个或多个字符。
? (问号)该位置上的零个或一个字符。
你应该这样做mething这样的(因为GetDirectories不支持正则表达式):
DirectoryInfo dInfo = new DirectoryInfo(@"C:\Test");
var allDirs = dInfo.GetDirectories();
var matchingDirs = allDirs.Where(info => Regex.Match(info.Name, "[0-9]", RegexOptions.Compiled).Success);
昆汀罗杰,我尝试了你的逻辑,但它获得的文件夹名称与“1”,“2”以及“A1”,“A2”等...我不要在我的输出。我相信小的tweeking将有助于获得输出,但现在使用其他解决方案。 – marak
我认为所有的正则表达式都需要锚定到字符串的开始和结尾,即'^ [0-9] $' – TheLethalCoder
https://msdn.microsoft.com/en-us/library/ms143325%28v=vs。 110%29.aspx 正则表达式不支持! – Alex
'[0-9]'通配符不适用于GetDirectories。据我所知,只支持'?'和'*'。你应该得到所有的目录然后过滤它们 – Pikoh
'int tempVar = 0;字符串[] dirs = Directory.GetDirectories(destinationFolderPath).Where(dir => int.TryParse(dir,out tempVar));' – Blablablaster