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

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;
        }

运行结果:

posted on 2016-03-03 09:26  包子wxl  阅读(1679)  评论(0编辑  收藏  举报