を避けるために: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.md
、b.md
とc.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"
正確にファイルの名前を変更するのはいつですか? 'forach'ループが実行されている間、または2回の呼び出しの間にですか? –
@DarinDimitrov、単体テストで私は別のものを試していました。テストは失敗していました。だから私はすべてのテストケースを削除し、手動ですべてをやった。私はforeachの前に名前を変更していました。私は手動で名前を変更して再コンパイルしてテストを再実行しようとしました。現在、7つのファイルを表示しています。ファイルエクスプローラとPowerShellは3つのファイルを表示します。 – Annie
msdnから、キャッシュされていないと言われます。 '返されたコレクションはキャッシュされません。コレクションのGetEnumeratorを呼び出すたびに新しい列挙が開始されます。代わりに 'GetFiles'を使うとどうなりますか? –