2010-05-11 32 views
5

Tôi cần tải danh sách tệp trên một số ổ đĩa với đường dẫn khớp với mẫu cụ thể, ví dụ: FA \ d \ d \ d \ d.xml trong đó \ d là chữ số (0,1 , 2..9). Vì vậy, các tệp có thể có các tên như FA5423.xml.Cách tìm tệp theo RegEx trong C#

Tên hiệu quả nhất để thực hiện việc này là gì?

Trả lời

1

Sử dụng các API thư mục để tìm FA????.xml, và chạy trong danh sách kết quả thông qua một bộ lọc regex:

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

Sẽ không Regex.Match trả về đối tượng Match chứ không phải là boolean? –

3

Bạn có thể làm một cái gì đó như:

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

Sau đó từ kết quả của bạn chỉ cần lặp qua chúng và xác minh chúng chống lại regex của bạn tức là các ký tự ? trong tên là tất cả các số

15

Bạn đang sử dụng C# 3?

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

'.Select (path => path)' là thừa. –

+0

oki ... và bây giờ mà tôi nhìn lại tôi nên neo regex và không có điểm trong việc '*. *' Hoặc. –

+0

@Phil Tốt hơn khi sử dụng EnumerateFiles vì ​​http://stackoverflow.com/questions/3554559/regex-to-find-a-file-in-folder này vì hiệu suất bạn có thể thấy sự khác biệt trong http://stackoverflow.com này/question/5669617/what-is-the-sự khác biệt giữa thư mục-enumeratefiles-vs-directory-getfiles – QMaster

Các vấn đề liên quan