2017-01-06 79 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

謝謝!有效! –