2013-11-24 19 views
5

Tôi đang sử dụng EnumerateFiles để có được tất cả * .md trong thư mục:EnumerateFiles để tránh bộ nhớ đệm

foreach (var mdName in Directory.EnumerateFiles(Path.Combine(BaseDirectory, 
          "assets/markdowns"), "*.md", SearchOption.AllDirectories)) 
{ 
    // async md parser call goes here 
} 

Tôi có ba tác phẩm thử nghiệm a.md, b.mdc.md.

Bây giờ khi tôi đổi tên a.md thành a1.md, EnumerateFiles trả về cả tên tệp cũ và mới .. Kết quả từ PowerShell cho biết tôi có 3 tệp, trong khi EnumerateFiles trả về 4 tệp.

Tôi đã đọc một nơi nào đó EnumerateFiles thực hiện một số loại bộ nhớ đệm, với tải chậm? Nhưng không nên vô hiệu hóa bộ nhớ cache khi tệp được đổi tên?

GetFiles/EnumerateFiles Output:

[0]: "C:\\Repos\\KiddiesBlog\\Tests\\bin\\Debug\\assets/less\\a.md" 
[1]: "C:\\Repos\\KiddiesBlog\\Tests\\bin\\Debug\\assets/less\\b.md" 
[2]: "C:\\Repos\\KiddiesBlog\\Tests\\bin\\Debug\\assets/less\\c.md" 
[3]: "C:\\Repos\\KiddiesBlog\\Tests\\bin\\Debug\\assets/less\\_a.md" 
[4]: "C:\\Repos\\KiddiesBlog\\Tests\\bin\\Debug\\assets/less\\_a1.md" 
[5]: "C:\\Repos\\KiddiesBlog\\Tests\\bin\\Debug\\assets/less\\_a2.md" 
[6]: "C:\\Repos\\KiddiesBlog\\Tests\\bin\\Debug\\assets/less\\_a3.md" 
+0

Khi nào chính xác là bạn đổi tên tệp? Trong khi vòng lặp 'forach' đang chạy hoặc giữa 2 cuộc gọi? –

+0

@DarinDimitrov, trong bài kiểm tra đơn vị tôi đã thử những thứ khác nhau. Các thử nghiệm đã thất bại. Vì vậy, tôi đã xóa tất cả các trường hợp thử nghiệm và thực hiện mọi thứ theo cách thủ công. Tôi đã đổi tên nó trước khi rao giảng. Tôi thậm chí đã thử đổi tên thủ công, biên dịch lại và chạy lại các bài kiểm tra. Bây giờ hiển thị 7 tập tin của nó .. File explorer và PowerShell hiển thị 3 tập tin. – Annie

+1

từ msdn nó nói nó không phải là bộ nhớ đệm 'Bộ sưu tập trả về không được lưu trữ; mỗi cuộc gọi đến GetEnumerator trên bộ sưu tập sẽ bắt đầu một liệt kê mới'. Điều gì sẽ xảy ra nếu bạn sử dụng 'GetFiles' thay thế? –

Trả lời

1

Hóa ra là sai lầm của tôi. Có một nhiệm vụ MSBuild chịu trách nhiệm tạo bản sao bóng của các tài sản thực trong thư mục Debug. Nó có tất cả các tập tin trước đó. VS không xóa thư mục trên Clean Solution. Tôi đoán tôi cần phải sửa đổi nhiệm vụ này để quan sát những thay đổi trong thư mục nguồn.

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