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

2019-04-10 08:39发布

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?

2条回答
贪生不怕死
2楼-- · 2019-04-10 09:35

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;
}
查看更多
兄弟一词,经得起流年.
3楼-- · 2019-04-10 09:38

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).

查看更多
登录 后发表回答