2013-11-24 4 views
5

Я использую 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" 
+0

Когда вы переименовываете файл? В то время как цикл forach' запущен или между двумя вызовами? –

+0

@DarinDimitrov, в модульном тесте Я пытался разные вещи. Тесты были неудачными. Поэтому я удалил все тестовые примеры и сделал все вручную. Я переименовал его перед выходом. Я даже попробовал вручную переименовать, перекомпилировать и повторно запустить тесты. Теперь он показывает 7 файлов. File Explorer и PowerShell показывают 3 файла. – Annie

+1

из msdn говорит, что это не кеширование 'Возвращенная коллекция не кэшируется; каждый вызов GetEnumerator в коллекции начнет новое перечисление ». Что произойдет, если вы вместо этого используете 'GetFiles'? –

ответ

1

Оказалось моя ошибка. Существует задача MSBuild, ответственная за создание теневой копии фактических активов в каталоге Debug. Он имеет все предыдущие файлы. VS не очищает папку на Clean Solution. Думаю, мне нужно изменить эту задачу, чтобы наблюдать за изменениями в исходном каталоге.

Смежные вопросы