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


    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;
            }
    复制代码

    运行结果:

  • 相关阅读:
    学到了林海峰,武沛齐讲的Day20 装饰器
    学到了林海峰,武沛齐讲的Day19 迭代细讲
    学到了林海峰,武沛齐讲的Day18 迭代
    学到了林海峰,武沛齐讲的Day18-4 文件操作
    hdu1106 java字符串分割
    hdu1282 回文数猜想
    hud1047 java大数忽略空格
    hdu1018 阶乘位数的数学原理
    hdu1715 java解大菲波数
    hdu1316 java解高精度斐波数
  • 原文地址:https://www.cnblogs.com/sexintercourse/p/16538228.html
Copyright © 2020-2023  润新知