2013-11-24 87 views
5

我使用EnumerateFiles讓所有* .MD目錄:EnumerateFiles以避免緩存

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

我有三個測試文件a.mdb.mdc.md

現在,當我將a.md重命名爲a1.md時,EnumerateFiles返回了新舊文件名。PowerShell的結果說我有3個文件,而EnumerateFiles返回4個文件。

我在某處讀過EnumerateFiles做了某種緩存,使用延遲加載?但是不應該無效文件重命名時緩存嗎?

的GetFiles/EnumerateFiles輸出:

[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

什麼時候你正在重命名文件?當'forach'循環正在運行或2次調用之間? –

+0

@DarinDimitrov,在單元測試中我嘗試了不同的東西。測試失敗了。所以我刪除了所有的測試用例並手動完成了所有的測試我是在foreach之前重命名它的。我甚至嘗試過手動重命名,重新編譯並重新運行測試。現在它顯示7個文件..文件資源管理器和PowerShell顯示3個文件。 – Annie

+1

msdn表示它沒有緩存'返回的集合沒有被緩存;對集合上的GetEnumerator的每次調用都會啓動一個新的枚舉。如果您使用'GetFiles',會發生什麼? –

回答

1

原來是我的錯誤。有一個MSBuild任務負責在Debug目錄中創建實際資產的卷影副本。它具有所有以前的文件。 VS未清除Clean Solution中的文件夾。我想我需要修改此任務以觀察源目錄中的更改。