GetFiles DirectoryInfo не показывает, что на самом деле находится в каталоге

Я использую метод GetFiles("*", SearchOption.AllDirectories) DirectoryInfo, чтобы получить все файлы в каталоге. Затем я перебираю все файлы и вызываю file.Length, чтобы получить полный размер исходного каталога. Этот каталог должен увеличиваться по мере запуска приложения.

Проверка размера каталога является периодической задачей, которая выполняется часто.

Вот странная часть. Когда я запускаю тест для этого, я вижу, что размер каталога никогда не увеличивается, когда это должно быть. Если я устанавливаю точку останова внутри цикла, я вижу, что она сработала, но она только сообщает об устаревших файлах, никогда не показывая их увеличение.

Действительно странная часть заключается в том, что если я установлю ту же точку останова и на этот раз щелкну правой кнопкой мыши каталог в проводнике Windows, выберу «Свойства» и позволю приложению продолжить работу, приложение распознает, что размер каталога увеличивается, и сообщит о правильном значения.

Я не уверен, поможет ли эта деталь, но при первом выборе Свойства я вижу устаревший размер, а при втором выборе вижу точный размер. Но мне нужно выбрать его только один раз, чтобы приложение начало распознавать, что оно выросло.

Я думаю, что это связано с каким-то кешированием, о котором я не знаю. Однако я использовал метод Refresh() для объекта DirectoryInfo, но безрезультатно.

Кто-нибудь знает, что происходит?

РЕДАКТИРОВАТЬ: добавление кода

Код для получения размера каталога:

GetDirectorySize(DirectoryInfo directory)
{
    directory.Refresh(); // Have tried with and without this line
    long size = 0;
    FileInfo[] files = directory.GetFiles("*", SearchOption.AllDirectories);
    foreach (FileInfo file in files)
    {
        size += file.Length;
    }

    return size;
}

person bronzeson    schedule 06.11.2019    source источник
comment
Файлы меняют размер? Или в каталог добавляются дополнительные файлы?   -  person Sam Axe    schedule 06.11.2019
comment
Это может представлять интерес: stackoverflow.com/ вопросы/6333891/   -  person Sam Axe    schedule 06.11.2019
comment
Кстати, используйте Directory.EnumerateFiles() вместо Directory.GetFiles(). Это имеет тенденцию быть быстрее.   -  person Sach    schedule 06.11.2019
comment
Я подозреваю, что файлы активно пишутся. Запись каталога не обновляется до тех пор, пока дескриптор не будет закрыт. Просмотр свойств открывает временный дескриптор и закрывает его, и это закрытие обновляет запись каталога.   -  person Raymond Chen    schedule 06.11.2019
comment
Вы говорите: Этот каталог должен увеличиваться по мере работы приложения, но не объясняете, почему. Было бы полезно знать, почему/как увеличивается размер каталога. Вы вручную добавляете файлы или ваш код добавляет файлы? Если это ваш код, было бы неплохо, если бы вы включили его, чтобы мы получили образец, который воспроизводит проблему (запуск приведенного выше примера не воспроизводит проблему на моей машине).   -  person Rufus L    schedule 06.11.2019
comment
Примечание: ваш метод можно сократить до одной строки: return directory?.EnumerateFiles("*", SearchOption.AllDirectories).Sum(file => file.Length) ?? 0;   -  person Rufus L    schedule 06.11.2019