2013-02-19 22 views
5

Jak mogę znaleźć oba typy plików * .gif i * .jpg przy użyciu DirectoryInfo.GetFiles funkcję w C#?DirectoryInfo.GetFiles, Jak uzyskać różne rodzaje plików w języku C#

Gdy próbuję tego kodu „znaków nielegalne w ścieżce”

string pattern = "*.gif|*.jpg"; 
FileInfo[] files = dir.GetFiles(pattern); 

Wyjątek Jest rzucony.

+2

rzucić okiem na to, może to ci pomaga. http://stackoverflow.com/questions/163162/can-you-call-directory-getfiles-with-multiple-filters – Belial09

+1

Spróbuj tego linku: http://www.beansoftware.com/ASP.NET- FAQ/Multiple-Filters-Directory.GetFiles-Method.aspx – Pandian

Odpowiedz

1

Nie można określić wiele wzorców w zapytaniu, musisz mieć listę rozszerzeń i nazywają GetFiles dla każdego z nich. Na przykład ...

var exts = new string[] { "*.gif", "*.jpg" }; 
foreach (var ext in exts) { 
    var files = dir.GetFiles(ext); 
} 

można użyć kompletny wieloznaczny z *.* aby wszystkie pliki na raz i filtrować je ręcznie, ale wykonanie to może być problem w zależności od katalogu i jego zawartości.

6

nie ma sposobu, aby połączyć w jeden wzór strun, trzeba zapisać wzory w formie listy:

var extensions = new[] { "*.gif", "*.jpg" }; 
var files = extensions.SelectMany(ext => dir.GetFiles(ext)); 
+0

Ładne i proste. Moja ulubiona opcja. – Tillito

0

Możesz dodać jako wiele rozszerzeń, jak chcesz w klauzuli where następującego kodu.

DirectoryInfo directoryInfo = new DirectoryInfo(filePath); 
FileInfo[] files = directoryInfo.GetFiles().Where(f => f.Extension == ".gif" || f.Extension == ".jpg").ToArray(); 
Powiązane problemy