Đó là hành vi của API Win32 (FindFirstFile
) nằm bên dưới GetFiles()
được phản ánh cho bạn.
Bạn sẽ cần phải tự lọc nếu bạn phải sử dụng GetFiles()
. Ví dụ:
GetFiles("*", searchOption).Where(s => s.EndsWith(".sbs",
StringComparison.InvariantCultureIgnoreCase));
Hoặc hiệu quả hơn:
EnumerateFiles("*", searchOption).Where(s => s.EndsWith(".sbs",
StringComparison.InvariantCultureIgnoreCase));
Lưu ý rằng tôi sử dụng StringComparison.InvariantCultureIgnoreCase
để đối phó với thực tế là tên tập tin Windows là case-insensitive.
Nếu hiệu suất là một vấn đề, đó là nếu tìm kiếm phải xử lý các thư mục với số lượng tệp lớn thì sẽ hiệu quả hơn để thực hiện lọc hai lần: một lần trong cuộc gọi tới GetFiles
hoặc EnumerateFiles
và một lần để xóa tên tệp không mong muốn. Ví dụ:
GetFiles("*.sbs", searchOption).Where(s => s.EndsWith(".sbs",
StringComparison.InvariantCultureIgnoreCase));
EnumerateFiles("*.sbs", searchOption).Where(s => s.EndsWith(".sbs",
StringComparison.InvariantCultureIgnoreCase));
Nguồn
2013-11-27 11:17:47
Bạn không thể (ít nhất là với GetFiles/GetDirectories). Đây là "giới hạn" của mẫu tìm kiếm. Bạn nên lặp qua các kết quả và lọc thủ công các kết quả bạn muốn. – varocarbas
cũng xem xét điều này: http://msdn.microsoft.com/en-us/library/wz42302f(v=vs.110).aspx –
có thể trùng lặp của [đối sánh tệp mở rộng chính xác với GetFiles()?] (http://stackoverflow.com/questions/5573063/exact-file-extension-match-with-getfiles) – Borja