Как мне определить размер папки?
Вопрос
Я конвертирую старое приложение, которое ежедневно записывает размеры папок.Устаревшее приложение использует сценарии.Библиотека FileSystemObject:
Set fso = CreateObject("Scripting.FileSystemObject")
Set folderObject = fso.GetFolder(folder)
size = folderObject.Size
В классах System.IO.Directory и System.IO.DirectoryInfo нет эквивалентного механизма.
Чтобы достичь того же результата в .NET, действительно ли мне нужно рекурсивно обходить всю структуру папок, сохраняя текущий общий размер файлов?
Обновить:@Jonathon / Ed - thanks....as Я подумал.Я думаю, я просто сошлюсь на сценарий.Библиотека FileSystemObject COM.Работает так же хорошо, даже если нарушается чистота .NET моего приложения.Это для приложения для внутренней отчетности, так что это не такая уж большая проблема.
Решение
Я думаю, что вы уже знаете ответ;вам нужно будет сложить все файлы в каталоге (а также его дочерние каталоги).) Я не знаю ни о какой встроенной функции для этого, но, эй, я не знаю всего (даже близко).
Другие советы
К сожалению, да...кто знает почему.
public static long DirSize(DirectoryInfo d)
{
long Size = 0;
// Add file sizes.
FileInfo[] fis = d.GetFiles();
foreach (FileInfo fi in fis)
{
Size += fi.Length;
}
// Add subdirectory sizes.
DirectoryInfo[] dis = d.GetDirectories();
foreach (DirectoryInfo di in dis)
{
Size += DirSize(di);
}
return(Size);
}
Как видно на:
http://msdn.microsoft.com/en-us/library/system.io.directory.aspx
Mads Kristensen размещенный об этом некоторое время назад...
private double size = 0;
private double GetDirectorySize(string directory)
{
foreach (string dir in Directory.GetDirectories(directory))
{
GetDirectorySize(dir);
}
foreach (FileInfo file in new DirectoryInfo(directory).GetFiles())
{
size += file.Length;
}
return size;
}