磁盤內存用掉太多,想查那些文件夾占的內存比較大,再找出沒有用的文件去刪除。
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; }
運行結果: