2008-09-26 4 views
0

Я конвертирую старое приложение, которое записывает размеры папок на ежедневной основе. Наследие приложение использует библиотеку 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 COM. Работает так же хорошо, даже если нарушает чистоту .NET моего приложения. Это приложение для внутренней отчетности, поэтому это не так уж и важно.

ответ

2

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

3

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

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

0

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

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; 
} 
+0

Ссылка не работает. – 2011-09-16 08:39:06