C#_IO操作_查询指定文件夹下的每个子文件夹占空间的大小

时间:2024-03-22 13:05:44

1.前言

磁盘内存用掉太多,想查那些文件夹占的内存比较大,再找出没有用的文件去删除。

2.代码

static void Main(string[] args)
{
while (true)
{
//指定文件夹下的每个子文件夹占空间的大小
Console.WriteLine("--------------------查询指定路径下所有的子文件夹占空间大小-------------------");
Console.WriteLine("请输入要查询的路径:");
string Path = Console.ReadLine(); Dictionary<string,long> dic = new Dictionary<string, long>();
//路径是否存在
if (!Directory.Exists(Path))
{
Console.WriteLine("输入路径不存在,请输入正确的路径!");
Console.WriteLine("");
}
else
{
//定义一个DirectoryInfo对象
DirectoryInfo di = new DirectoryInfo(Path);
//通过GetFiles方法,获取di目录中的所有文件
foreach (FileInfo fi in di.GetFiles())
{
//把信息加入到字典中
dic.Add(fi.FullName, fi.Length);
}
//获取di中所有的文件夹,并存到一个新的对象数组中
DirectoryInfo[] dis = di.GetDirectories();
if (dis.Length > )
for (int i = ; i < dis.Length; i++)
{
long length = GetDirectoryLength(dis[i].FullName);
dic.Add(dis[i].FullName, length);
}
//linq写法,对Dictionary按value排序
var dicSort = from objDic in dic orderby objDic.Value descending select objDic;
foreach (KeyValuePair<string,long> dic1 in dicSort)
{
//KB转为M 要/1024变K 再/1024变M
Console.WriteLine(string.Format("{0}:{1}{2}", dic1.Key.ToString(), Math.Round(Convert.ToDouble(dic1.Value) / / , ),"M"));
}
}
} } //指定文件夹占空间大小
public static long GetDirectoryLength(string dirPath)
{
//判断给定的路径是否存在,如果不存在则退出
if (!Directory.Exists(dirPath))
return ;
long len = ; //定义一个DirectoryInfo对象
DirectoryInfo di = new DirectoryInfo(dirPath); //通过GetFiles方法,获取di目录中的所有文件的大小
foreach (FileInfo fi in di.GetFiles())
{
len += fi.Length;
} //获取di中所有的文件夹,并存到一个新的对象数组中,以进行递归
DirectoryInfo[] dis = di.GetDirectories();
if (dis.Length > )
{
for (int i = ; i < dis.Length; i++)
{
len += GetDirectoryLength(dis[i].FullName);
}
}
return len;
}

运行结果:

C#_IO操作_查询指定文件夹下的每个子文件夹占空间的大小