如何使用GetDirectories C#搜索数字目录名称

时间:2016-03-07 08:29:26

标签: c#

我正在编写一个代码,用于从输出文件夹中获取名称为“1”,“2”,“3”,“4”等的子目录(即只有数字名称的子目录)

例如: 这是我的输出文件夹:C:\ Users \ xyz \ Desktop \ Output

我想获得名称为

的子目录
  

“1”,“2”,“3”,“4”

输出:

  

C:\用户\ XYZ \桌面\输出\ A \ A1 \ 1
  C:\ Users \用户XYZ \桌面\输出\ A \ A1 \ 2
  C:\ Users \用户XYZ \桌面\输出\ A \ A1 \ 3
  C:\ Users \用户XYZ \桌面\输出\ A \ A1 \ 4
  C:\ Users \用户XYZ \桌面\输出\ A \ A2 \ 1
  C:\ Users \用户XYZ \桌面\输出\ 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获取了搜索模式通配符的更多选项

这个逻辑有什么问题?

3 个答案:

答案 0 :(得分:1)

使用Regex,你可以这样做:

List<string> destDir1 = Directory.GetDirectories(folderPath, "*",
    SearchOption.AllDirectories)
        .Where(f => Regex.IsMatch(f, @"[\\/]\d+$")).ToList();

[\/]\d+$匹配文件夹/或\([\\/])后跟一个或多个(+)数字(\d)({{1} })。

以上代码返回$,每个字符串的最后一部分都是一个数字,即: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

答案 1 :(得分:1)

你应该这样做(因为GetDirectories不支持正则表达式):

<receiver android:name=".PushMessageReceiver" >
     <intent-filter>
          <!-- Receives the actual messages. -->
          <category android:name="com.test.myAppname" />
          <action android:name="com.test.client.MSGRECEIVE" />
     </intent-filter>
</receiver>

enter image description here

enter image description here

答案 2 :(得分:0)

您发布的msdn链接适用于Visual Studio中的搜索模式(您在搜索代码文件时使用的模式)。

*中除(正常DOS)?GetDirectories以外的(正则表达式)搜索模式或通配符不支持。

因此,您可能需要枚举所有目录并在代码中检查它们的名称。

来自MDSN about GetDirectories

  

searchPattern可以是文字和通配符的组合,但不支持正则表达式。 searchPattern中允许使用以下通配符说明符。

     

...

     

*(星号)该位置的零个或多个字符。

     

? (问号)该位置的零个或一个字符。