Я использую EnumerateFiles
, чтобы получить все * .md в каталоге:EnumerateFiles, чтобы избежать кэширования
foreach (var mdName in Directory.EnumerateFiles(Path.Combine(BaseDirectory,
"assets/markdowns"), "*.md", SearchOption.AllDirectories))
{
// async md parser call goes here
}
У меня есть три тестовые файлы 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' запущен или между двумя вызовами? –
@DarinDimitrov, в модульном тесте Я пытался разные вещи. Тесты были неудачными. Поэтому я удалил все тестовые примеры и сделал все вручную. Я переименовал его перед выходом. Я даже попробовал вручную переименовать, перекомпилировать и повторно запустить тесты. Теперь он показывает 7 файлов. File Explorer и PowerShell показывают 3 файла. – Annie
из msdn говорит, что это не кеширование 'Возвращенная коллекция не кэшируется; каждый вызов GetEnumerator в коллекции начнет новое перечисление ». Что произойдет, если вы вместо этого используете 'GetFiles'? –