如何获取文件夹的大小?

时间:2020-03-06 14:45:42  来源:igfitidea点击:

我正在转换一个旧的应用程序,该应用程序每天记录文件夹的大小。旧版应用程序使用Scripting.FileSystemObject库:

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

System.IO.Directory和System.IO.DirectoryInfo类上没有等效的机制。

为了在.NET中获得相同的结果,我实际上是否必须递归遍历整个文件夹结构,以保持运行中的文件大小总数?

更新:@ Jonathon / Ed谢谢。。。正如我所想到的。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。我想我只引用Scripting.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;
}