2013-11-24 15 views
5

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" 
+0

Wann genau umbenennen Sie die Datei? Während die forach-Schleife läuft oder zwischen zwei Aufrufen? –

+0

@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

+1

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? –

Antwort

1

stellte sich heraus, mein Fehler. Es gibt eine MSBuild Aufgabe, die für das Erstellen von Schattenkopie der tatsächlichen Assets in Debug-Verzeichnis verantwortlich ist. Es hat alle vorherigen Dateien. VS löscht den Ordner in Clean Solution nicht. Ich denke, ich muss diese Aufgabe ändern, um die Änderungen im Quellverzeichnis zu beobachten.