How do I Get Folder Size in C#? [duplicate]

2019-04-10 08:34发布

问题:

Possible Duplicate:
How do I get a directory size (files in the directory) in C#?

In vbscript, it's incredibly simple to get the folder size in GB or MB:

Set oFSO = CreateObject("Scripting.FileSystemObject")
Dim fSize = CInt((oFSO.GetFolder(path).Size / 1024) / 1024)
WScript.Echo fSize

In C#, with all my searches, all I can come up with are long, convoluted, recursive searches for every file size in all subfolders, then add them all up at the end.

Is there no other way?

回答1:

How about this:

private static long GetDirectorySize(string folderPath)
{
    DirectoryInfo di = new DirectoryInfo(folderPath);
    return di.EnumerateFiles("*", SearchOption.AllDirectories).Sum(fi => fi.Length);
}

from here.

This will give you the size in bytes; you will have to "prettify" that into GBs or MBs.

NOTE: This only works in .NET 4+.

EDIT: Changed the wildcard search from "*.*" to "*" as per the comments in the thread to which I linked. This should extend its usability to other OSes (if using Mono, for example).



回答2:

You can also use recursion to get all subdirectories and sum the sizes:

public static long GetDirectorySize(string path){
    string[] files = Directory.GetFiles(path);
    string[] subdirectories = Directory.GetDirectories(path);

    long size = files.Sum(x => new FileInfo(x).Length);
    foreach(string s in subdirectories)  
        size += GetDirectorySize(s);

    return size;
}