0

我正在转换一个每天记录文件夹大小的旧应用程序。旧版应用程序使用 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 纯度,也能正常工作。这是一个内部报告应用程序,所以没什么大不了的。

4

3 回答 3

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

于 2008-09-26T02:22:55.513 回答
2

我想你已经知道答案了;您将需要添加目录中的所有文件(以及它的子目录。)我不知道任何内置函数,但是嘿,我不知道一切(甚至不知道)。

于 2008-09-26T02:23:37.837 回答
0

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;
}
于 2008-09-26T02:34:00.010 回答