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 > 0) for (int i = 0; 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) / 1024 / 1024, 2),"M")); } } } } //指定文件夹占空间大小 public static long GetDirectoryLength(string dirPath) { //判断给定的路径是否存在,如果不存在则退出 if (!Directory.Exists(dirPath)) return 0; long len = 0; //定义一个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 > 0) { for (int i = 0; i < dis.Length; i++) { len += GetDirectoryLength(dis[i].FullName); } } return len; }
运行结果: