2013-04-12 21 views
5

tôi có mã này cơ bảnDirectory.GetFiles() searchpattern

Directory.GetFiles(filepath, "*.OUT") 

Trong filepath là một file có tên Filename.OUT

Đoạn mã trên nhận thấy rằng tập tin tốt.

Bây giờ, tôi đổi tên tệp bằng cách thêm UniqueID để tệp không được nhận lại.

Filename.OUT6F9619FF-8B86-D011-B42D-00C04FC964FF

Tuy nhiên, các tập tin được VẪN nhận được chọn của Directory.GetFiles()!

Vì vậy, mẫu tìm kiếm (*.OUT) là mẫu regex? Nếu vậy, điều này có ý nghĩa.

Thông tin trên MSDN dường như không ngụ ý rằng đó là. Nếu không, có một mẫu tôi có thể sử dụng để nó không được chọn?

Trả lời

3

Tôi phải tự giải quyết vấn đề này khi làm việc với Trình theo dõi hệ thống tệp. Thêm vào những gì MichaelPerrenoud nói Bạn có thể chạy tất cả các trận đấu của bạn thông qua một bộ lọc nhanh chóng, như:

bool ExtensionOf (String f, String targetext) { 
    return f.EndsWith(targetext); 
} 

Nếu bạn không cần sự linh hoạt của targetext, chỉ cần thay thế nó hoàn toàn với ".OUT"

Chúc may mắn!

+0

+1. Đây là một phương pháp mở rộng tốt để có. –

3

đây là hành vi vì trong tài liệu bạn liên kết nó khẳng định:

Một searchPattern có phần mở rộng tập tin chính xác ba nhân vật trả về file có một phần mở rộng của ba hoặc nhiều ký tự, nơi ba nhân vật đầu tiên khớp với đuôi tệp được chỉ định trong searchPattern.

nhưng ngược lại nó khẳng định:

Một searchPattern có phần mở rộng tập tin của một, hai, hoặc nhiều hơn ba nhân vật sẽ chỉ trả lại các file có phần mở rộng của chính xác độ dài phù hợp với phần mở rộng tập tin định trong searchPattern.

vì vậy trong trường hợp của bạn, bạn sẽ tới để lọc kết quả. Tôi ước nó khác. Đây là một vấn đề đối với nhiều người, kể cả bản thân tôi.

2

Bạn có thể tước-out (substring) chuỗi đầu vào theo chiều dài của guid:

string fileName = "Filename.OUT"; 
string seed = "6F9619FF-8B86-D011-B42D-00C04FC964FF"; 
string input = fileName + seed; 
string result = input.Substring(0, input.Length - seed.Length); 
FileInfo file = new FileInfo(result); 
Console.WriteLine(file.Extension); 

và làm việc với kết quả như thường:

private static string StripSeed(string input) 
{ 
    return input.Substring(0, input.Length - 36); // length of seed (guid) 
} 

Directory.EnumerateFile("*.*") 
     .Select(p => StripSeed(p)) 
     .Select(f => new FileInfo(f)) 
     .Where(fi => fi.Extesnsion.Equals(".OUT", StringComparison.OrdinalIgnoreCase)); 

Sandbox.

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