2017-01-06 3 views
1

Ich habe ein Pfadverzeichnis namens serverpath, das konfigurierbar ist. z.extrahieren bestimmte Verzeichnisse aus dem Satz von Verzeichnissen

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

im Serverpfad gibt es eine große Anzahl von Verzeichnissen. in folgendem Format:

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

wenn ich

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

rufe ich alle Verzeichnisse zu bekommen, aber ich will nur diejenigen Pfad, der im gegebenen Format.

Bisher habe ich versucht, "??. ??. ????" Muster in der EnumerateDirectories Methode

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

aber ich Pfad noch immer bin, die sind wie folgt aus:

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

i wie diese nur Pfad wollen:

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

und alle anderen Pfade ausschließen im Verzeichnis

eine andere Möglichkeit, dies zu tun, außer das Zählen von Schrägstrichen ..?

Edit: Gibt es eine Möglichkeit, Verzeichnispfad des letzten Ordners im Verzeichnis zu erhalten? "01.01.2017" Ordner sind die letzten Ordner in ihren jeweiligen Verzeichnissen.

+0

Es sieht aus wie es ist "." nach dem ersten "??" Das verursacht das Problem - ich spielte mit ähnlicher Ordnerstruktur in meinem Debug-Ordner, der mehrere Unterordner hat & ich habe alle zwei Zeichenordner (de, es, fr, ...) aufgelistet. Als ich das Format des letzten Ordners auf 01_01_2017 und die Suchzeichenfolge auf "?? _ ?? _ ????" änderte - dann habe ich nur den benötigten Ordner zurückbekommen. – PaulF

+0

das ist keine Option für mich..ich darf die Ordnernamen nicht ändern. –

+0

Dann sieht es so aus, als ob Sie möglicherweise eine Nachbearbeitung vornehmen müssen, da es scheint, dass EnumerateDirectories funktioniert - obwohl es in der Dokumentation nichts zu sagen gibt. – PaulF

Antwort

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; 
     } 
    } 
} 

Dies scheint zu funktionieren. Entschuldigung, wenn ich falsch verstanden habe - ich bin neu in diesem Bereich.

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

Danke! es funktionierte! –

Verwandte Themen