2013-01-15 8 views

Trả lời

13

Bạn có thể sử dụng một cái gì đó như thế này

string[] extensions = { "jpg", "txt", "asp", "css", "cs", "xml" }; 

string[] dizin = Directory.GetFiles(@"c:\s\sent", "*.*") 
    .Where(f => extensions.Contains(f.Split('.').Last().ToLower())).ToArray(); 

Hoặc sử dụng an toàn hơn FileInfo.Extension chút so với String.Split nhưng có thể chậm hơn

string[] extensions = { ".jpg", ".txt", ".asp", ".css", ".cs", ".xml" }; 

string[] dizin = Directory.GetFiles(@"c:\s\sent", "*.*") 
    .Where(f => extensions.Contains(new FileInfo(f).Extension.ToLower())).ToArray(); 

Hoặc như juharr nêu bạn cũng có thể sử dụng System.IO.Path.GetExtension

string[] extensions = { ".jpg", ".txt", ".asp", ".css", ".cs", ".xml" }; 

string[] dizin = Directory.GetFiles(@"c:\s\sent", "*.*") 
    .Where(f => extensions.Contains(System.IO.Path.GetExtension(f).ToLower())).ToArray(); 
+0

Hoặc sử dụng 'Path.GetExtension' – juharr

+1

vâng, có rất nhiều cách khác nhau, chỉ là bất cứ điều gì làm việc tốt nhất cho OP, một chút của một sự xấu hổ 'Directory.GetFiles' không cho phép phần mở rộng mutiple –

1

Bạn có các lựa chọn thay thế khác nhau.

String[] files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Where(s => s.ToLower().EndsWith(".jpg") || s.ToLower().EndsWith(".txt") || s.ToLower().EndsWith(".asp")); 

Hoặc:

String[] files = Directory.GetFiles(path).Where(file => Regex.IsMatch(file, @"^.+\.(jpg|txt|asp)$")); 

Hoặc (nếu bạn không sử dụng phần mở rộng LINQ):

List<String> files = new List<String>(); 
String[] extensions = new String[] { "*.jpg", "*.txt", "*.asp" }; 

foreach (String extension in extensions) 
{ 
    String[] files = Directory.GetFiles(path, found, SearchOption.AllDirectories); 

    foreach (String file in files) 
     files.Add(file); 
}