Вопрос

Я конвертирую старое приложение, которое ежедневно записывает размеры папок.Устаревшее приложение использует сценарии.Библиотека 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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top