ich EnumerateFiles
bin mit allen im Verzeichnis * .md zu erhalten:EnumerateFiles zu vermeiden Caching
foreach (var mdName in Directory.EnumerateFiles(Path.Combine(BaseDirectory,
"assets/markdowns"), "*.md", SearchOption.AllDirectories))
{
// async md parser call goes here
}
Ich habe drei Testdateien a.md
, b.md
und c.md
.
Jetzt, wenn ich a.md in a1.md umbenenne, gibt EnumerateFiles
sowohl alten als auch neuen Dateinamen zurück. Das Ergebnis von PowerShell sagt, dass ich 3 Dateien habe, während EnumerateFiles 4 Dateien zurückgibt.
ich irgendwo EnumerateFiles gelesen hat irgendeine Art von Caching, mit verzögertes Laden? Aber sollte es nicht Cache ungültig werden, wenn die Datei umbenannt wird?
GetFiles/EnumerateFiles Ausgang:
[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"
Wann genau umbenennen Sie die Datei? Während die forach-Schleife läuft oder zwischen zwei Aufrufen? –
@DarinDimitrov, im Komponententest versuchte ich verschiedene Dinge. Die Tests waren fehlgeschlagen. Also habe ich alle Testfälle entfernt und alles manuell gemacht. Ich habe es vor foreach umbenannt. Ich habe sogar manuell umbenannt, neu kompiliert und die Tests erneut ausgeführt. Jetzt zeigt es 7 Dateien. Datei-Explorer und PowerShell zeigen 3 Dateien. – Annie
von msdn es sagt, es ist nicht im Cache 'Die zurückgegebene Sammlung ist nicht zwischengespeichert; Jeder Aufruf von GetEnumerator für die Auflistung startet eine neue Enumeration. Was passiert, wenn Sie 'GetFiles' stattdessen verwenden? –