2017-01-06 29 views
1

我有一个路径目录,称为serverpath,它是可配置的。 例如。从目录集中提取特定的目录

[email protected]"C:\AAA\New folder\"; 

在服务器路径中有大量的目录。在以下格式:

serverpath\ID1\ID2\FileType\YYYY\MM\DD.MM.YYYY 
i.e. C:\AAA\New folder\123\456\2017\01\01.01.2017 

当我打电话

Directory.EnumerateDirectories(serverpath, "*", System.IO.SearchOption.AllDirectories) 

我得到的所有的目录,但我想只有那些在给定的格式路径。

到目前为止我已经尝试添加“?? ?? ?? ??”在EnumerateDirectories方法

Directory.EnumerateDirectories(serverpath, "??.??.????", System.IO.SearchOption.AllDirectories) 

但仍然我得到的路径模式,其是这样的:

C:\AAA\New folder\123\456\pdf\2017\01 
C:\AAA\New folder\123\456\txt\2017\01 

我只想路径这样的:

C:\AAA\New folder\123\456\pdf\2017\01\01.01.2017 
C:\AAA\New folder\123\456\txt\2017\01\01.01.2017 

,并排除所有其他路径在目录

任何其他方式来做到这一点,而不是计数斜杠..?

编辑:有没有什么办法可以获取目录中最后一个文件夹的目录路径? “01.01.2017”文件夹是其各自目录中的最后一个文件夹。

+0

它看起来像是“。”之后的第一个“??”这是造成这个问题 - 我在我的调试文件夹中使用类似的文件夹结构,它有多个语言子文件夹,并且我列出了所有两个字符文件夹(de,es,fr,...)。当我将最终文件夹的格式更改为01_01_2017并将搜索字符串更改为“?? _ ?? _ ????” - 然后我只拿回了需要的文件夹。 – PaulF

+0

这不是我的选择..我不允许更改文件夹名称。 –

+0

然后它看起来像你可能需要做一些后处理,因为它似乎是EnumerateDirectories的工作方式 - 尽管文档中没有任何说明。 – PaulF

回答

1
using System.IO; 
using System.Linq; 
using System.Text.RegularExpressions; 

namespace ConsoleApp 
{ 
    class Program 
    { 
     static void Main() 
     { 
      string serverpath = @"C:\AAA\New folder\"; 

      Regex re = new Regex(@"\d{2}\.\d{2}\.\d{4}"); 
      var dirs = from dir in 
         Directory.EnumerateDirectories(serverpath, "*", SearchOption.AllDirectories) 
         where re.IsMatch(dir) 
         select dir; 
     } 
    } 
} 

这似乎工作。对不起,如果我误解了 - 我是新手。

\d = digit 
{} = quantifier (of what is left of the quantifier) 
. = any character (NOT OF ANY USE HERE) 
\. = explicit dot 
+0

谢谢!有效! –