2013-11-24 7 views
5

を避けるために:EnumerateFilesは、私はすべての*ディレクトリにた.md取得する<code>EnumerateFiles</code>を使用していキャッシング

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

私は3つのテストファイル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

。 Debugディレクトリに実際の資産のシャドウコピーを作成するのは、MSBuildタスクです。それはすべての以前のファイルを持っています。 VSはClean Solution上のフォルダをクリアしていません。私はソースディレクトリの変更を観察するためにこの作業を変更する必要があると思います。

関連する問題

 関連する問題