Как получить размер папки? - PullRequest
       7

Как получить размер папки?

0 голосов
/ 26 сентября 2008

Я конвертирую старое приложение, которое ежедневно записывает размеры папок. Устаревшее приложение использует библиотеку Scripting.FileSystemObject:

Set fso = CreateObject("Scripting.FileSystemObject")
Set folderObject = fso.GetFolder(folder)
size = folderObject.Size

В классах System.IO.Directory и System.IO.DirectoryInfo нет эквивалентного механизма.

Чтобы достичь того же результата в .NET, нужно ли мне рекурсивно обходить всю структуру папок, сохраняя при этом общее количество файлов?

Обновление: @ Джонатон / Эд - спасибо .... как я и думал. Я думаю, что я просто буду ссылаться на библиотеку COM Scripting.FileSystemObject. Работает так же хорошо, даже если нарушает чистоту .NET моего приложения. Это приложение для внутренней отчетности, так что это не такая уж большая проблема.

Ответы [ 3 ]

3 голосов
/ 26 сентября 2008

К сожалению, да ... кто знает почему.

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

2 голосов
/ 26 сентября 2008

Я думаю, что вы уже знаете ответ; вам нужно будет сложить все файлы в каталоге (а также его дочерних каталогах). Я не знаю какой-либо встроенной функции для этого, но эй, я не знаю все (даже близко).

0 голосов
/ 26 сентября 2008

Мадс Кристенсен опубликовано об этом некоторое время назад ...

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...