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