Я использую метод 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;
}
Directory.EnumerateFiles()
вместоDirectory.GetFiles()
. Это имеет тенденцию быть быстрее. - person Sach   schedule 06.11.2019return directory?.EnumerateFiles("*", SearchOption.AllDirectories).Sum(file => file.Length) ?? 0;
- person Rufus L   schedule 06.11.2019