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.md
và c.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"
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? –
@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
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ế? –