2010-05-11 22 views
5

Potrzebuję uzyskać listę plików na jakimś dysku ze ścieżkami, które pasują do określonego wzorca, na przykład FA \ d \ d \ d \ d.xml gdzie \ d jest cyfrą (0,1 , 2..9). Pliki mogą mieć nazwy takie jak FA5423.xml.Jak znaleźć pliki zgodnie z RegEx w C#

Jaka jest najbardziej wydajna nazwa, aby to zrobić?

Odpowiedz

1

Użyj API katalogu znaleźć FA????.xml i uruchom wynikowej liście przez regex Filtr:

var fa = from f in Directory.GetFiles("FA????.xml") 
     where Regex.Match(f, "FA\d\d\d\d\.xml") 
     select f; 
+4

Czy Regex.Match nie zwróci obiektu dopasowującego, a nie boolowskiego? –

3

mógłby zrobić coś podobnego:

System.IO.Directory.GetFiles(@"C:\", "FA????.xml", SearchOption.AllDirectories); 

następnie z wynikami po prostu iteracyjne nad nimi i zweryfikuj je w odniesieniu do swojego wyrażenia regularnego, tj., że wszystkie znaki w nazwie są numerami

15

Czy używasz C# 3?

Regex reg = new Regex(@"^FA[0-9]{4}\.xml$"); 
var files = Directory.GetFiles(yourPath, "*.xml").Where(path => reg.IsMatch(path)); 
+0

'. Wybierz (ścieżka => ścieżka)' jest zbędne. –

+0

oki ... a teraz, gdy ponownie zaglądam, powinienem zakotwiczyć regex i nie ma sensu uzyskiwać '*. *'. –

+0

@Phil Lepiej używać EnumerateFiles jako tego http://stackoverflow.com/questions/3554559/regex-to-find-a-file-in-folder z powodu wydajności można zobaczyć różnicę w tym http://stackoverflow.com/questions/5669617/what-is-the-the-difference-between-directory-enumeratefiles-vs-directory-getfiles – QMaster