📅  最后修改于: 2023-12-03 15:22:06.332000             🧑  作者: Mango
在编写一些需要处理大量文件或者文件夹的程序时,我们经常需要估计文件夹大小。本篇文章将介绍如何使用 C# 编程实现估计文件夹大小,并给出完整代码和解释。
估计文件夹大小的方法有多种,其中一种比较简单的方法是递归遍历文件夹,对每个文件进行大小的统计,并将结果累加起来。本篇文章采用该方法实现。
using System;
using System.IO;
static long GetFileSize(string path)
{
if (File.Exists(path))
{
FileInfo fileInfo = new FileInfo(path);
return fileInfo.Length;
}
else
{
return 0;
}
}
该方法用于计算文件的大小,它首先判断文件是否存在,如果存在就使用 FileInfo
类获取文件大小,如果不存在则返回 0。
static long GetFolderSize(string path)
{
if (!Directory.Exists(path)) return 0;
long size = 0;
string[] files = Directory.GetFiles(path);
foreach (string file in files)
{
size += GetFileSize(file);
}
string[] subFolders = Directory.GetDirectories(path);
foreach (string subFolder in subFolders)
{
size += GetFolderSize(subFolder);
}
return size;
}
该方法首先判断文件夹是否存在,如果不存在则返回 0。接着遍历文件夹中的所有文件,对每个文件调用 GetFileSize
方法累加文件大小,并遍历文件夹中的所有子文件夹,对每个子文件夹调用 GetFolderSize
方法累加子文件夹大小,最终返回文件夹的大小。
Main
方法中调用 GetFolderSize
方法,并输出结果,如下所示:static void Main(string[] args)
{
string path = "C:\\Windows";
long size = GetFolderSize(path);
Console.WriteLine("文件夹大小为:" + size / 1024 / 1024 + " MB");
}
该代码中定义了一个 path
变量,表示要估计大小的文件夹路径,使用 GetFolderSize
方法得到文件夹的大小,并根据需要进行单位换算(这里换算成了 MB),最终输出结果。
using System;
using System.IO;
namespace FolderSizeDemo
{
class Program
{
static long GetFileSize(string path)
{
if (File.Exists(path))
{
FileInfo fileInfo = new FileInfo(path);
return fileInfo.Length;
}
else
{
return 0;
}
}
static long GetFolderSize(string path)
{
if (!Directory.Exists(path)) return 0;
long size = 0;
string[] files = Directory.GetFiles(path);
foreach (string file in files)
{
size += GetFileSize(file);
}
string[] subFolders = Directory.GetDirectories(path);
foreach (string subFolder in subFolders)
{
size += GetFolderSize(subFolder);
}
return size;
}
static void Main(string[] args)
{
string path = "C:\\Windows";
long size = GetFolderSize(path);
Console.WriteLine("文件夹大小为:" + size / 1024 / 1024 + " MB");
}
}
}
通过以上代码,我们可以很方便地实现一个估计文件夹大小的程序,并根据需要进行单位换算。但需要注意的是,文件夹中的大小并不总是准确的,因为有些文件可能被压缩或者加密,导致实际大小与估计大小不同。