Я уже создал рекурсивную функцию для получения размера каталога пути к папке. Однако это работает с растущим количеством каталогов, в которых мне приходится искать (и количеством файлов в каждой соответствующей папке), это очень медленный и неэффективный метод.
static string GetDirectorySize(string parentDir)
{
long totalFileSize = 0;
string[] dirFiles = Directory.GetFiles(parentDir, "*.*",
System.IO.SearchOption.AllDirectories);
foreach (string fileName in dirFiles)
{
// Use FileInfo to get length of each file.
FileInfo info = new FileInfo(fileName);
totalFileSize = totalFileSize + info.Length;
}
return String.Format(new FileSizeFormatProvider(), "{0:fs}", totalFileSize);
}
Это ищет путь аргумента во всех подкаталогах, поэтому Массив становится довольно большим. Есть ли лучший способ сделать это? Я искал, но пока ничего не нашел.
Другая идея, которая пришла мне в голову, заключалась в том, чтобы поместить результаты в кеш, и когда функция вызывается снова, попробуйте найти различия и повторный поиск только в папках, которые изменились.Не уверен, что это тоже хорошо...