如何在C#中获取文件夹大小?

7 浏览
0 Comments

如何在C#中获取文件夹大小?

在vbscript中,获取文件夹大小以GB或MB为单位非常简单:

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

在C#中,通过我的所有搜索,我能找到的只有冗长、复杂的递归搜索所有子文件夹中的每个文件大小,然后在最后将它们全部相加。

难道没有其他方法吗?

0
0 Comments

问题的出现原因是在C#中获取文件夹大小时,搜索结果都是冗长且复杂的递归搜索,需要遍历每个文件夹中的文件大小,然后将它们累加起来。

解决方法是使用递归来获取所有子目录并计算它们的大小。可以使用下面的代码来实现:

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;
}

这段代码将首先获取指定路径下的所有文件和子目录。然后,它会使用LINQ的`Sum`方法来计算文件的大小并将它们累加到`size`变量中。接下来,它会迭代子目录,并对每个子目录递归调用`GetDirectorySize`方法来获取子目录的大小,并将其累加到`size`变量中。最后,它会返回整个文件夹的大小。

这种方法使用递归的方式来计算文件夹的大小,可以简化代码并提高性能。

0
0 Comments

问题的原因:提问者想要在C#中获取文件夹的大小,但不知道如何实现。

解决方法:提问者在回答中找到了一个解决方案,通过使用DirectoryInfo和EnumerateFiles方法来获取文件夹的大小。代码首先创建一个DirectoryInfo对象,然后使用EnumerateFiles方法获取文件夹中的所有文件,再使用Sum方法计算文件大小的总和。该方法返回的是以字节为单位的大小,如果需要以GB或MB为单位,还需要进行转换。

需要注意的是,这个方法只适用于.NET 4及以上版本。在回答的编辑中,将通配符搜索从"*.*"更改为"*",以增加在其他操作系统上的可用性(例如,在使用Mono时)。

此外,回答中还提供了一个用于将字节转换为KB、MB、GB等格式的方法的链接。

0