GetFiles DirectoryInfo не показывает, что на самом деле находится в каталоге - PullRequest
0 голосов
/ 06 ноября 2019

Я использую метод DirectoryInfo GetFiles ("*", SearchOption.AllDirectories), чтобы получить все файлы в каталоге. Затем я перебираю все файлы и вызываю 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;
}
...