如何在C#中获取文件夹大小?
问题的出现原因是在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`变量中。最后,它会返回整个文件夹的大小。
这种方法使用递归的方式来计算文件夹的大小,可以简化代码并提高性能。
问题的原因:提问者想要在C#中获取文件夹的大小,但不知道如何实现。
解决方法:提问者在回答中找到了一个解决方案,通过使用DirectoryInfo和EnumerateFiles方法来获取文件夹的大小。代码首先创建一个DirectoryInfo对象,然后使用EnumerateFiles方法获取文件夹中的所有文件,再使用Sum方法计算文件大小的总和。该方法返回的是以字节为单位的大小,如果需要以GB或MB为单位,还需要进行转换。
需要注意的是,这个方法只适用于.NET 4及以上版本。在回答的编辑中,将通配符搜索从"*.*"更改为"*",以增加在其他操作系统上的可用性(例如,在使用Mono时)。
此外,回答中还提供了一个用于将字节转换为KB、MB、GB等格式的方法的链接。