文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C#如何获取文件夹所占空间大小的功能

2023-07-02 10:49

关注

本篇内容主要讲解“C#如何获取文件夹所占空间大小的功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#如何获取文件夹所占空间大小的功能”吧!

虽然现在硬盘越来越大,但是清理垃圾还是必要的。这时我们往往需要一个获取文件夹所占空间大小的功能,从而判断垃圾文件的位置。

这个时候,我们常用的在右键属性中查看文件夹所占空间的方法显得效率实在太低。往往需要一些工具来辅助实现这个功能。一般有两个工具可以实现这个功能:diruse和du。diruse是MS在系统中的一个附加的工具,du是sysinternals公司的,不过sysinternals好像已经被MS收购了。这两个工具都是命令行工具,但也保持着MS一贯的简单易用的特点。

这里以diruse为例介绍其用法:

diruse /M /* c:\OTHER

Size (mb)  Files      Directory
2.91     14          SUB-TOTAL: C:\OTHER\BusinessInfo
61.98   1309        SUB-TOTAL: C:\OTHER\software
41.60     41         SUB-TOTAL: C:\OTHER\drivers
0.02     21          SUB-TOTAL: C:\OTHER\work
3.03      9          SUB-TOTAL: C:\OTHER\config
0.00      3          SUB-TOTAL: C:\OTHER\lnetwork
182.16    537        SUB-TOTAL: C:\OTHER\bkup
14.71      6          SUB-TOTAL: C:\OTHER\vpnclient
1.81     60          SUB-TOTAL: C:\OTHER\info
817.20    224        SUB-TOTAL: C:\OTHER\tools
515.25    449        SUB-TOTAL: C:\OTHER\wtnfiles
3089.50  10765       SUB-TOTAL: C:\OTHER\MP3
4730.18  13438       TOTAL

可以非常直观的看到各个文件夹所占的空间。

但是一个非常郁闷的地方是:这两个程序都不支持中文,一旦碰到中文文件夹就晕菜了,无法显示全部路径。作为MS的官方工具,有这个bug确实让人大跌眼镜。没办法,我只好写了个程序来纠正这个bug。 

class DirUseInfo{    public string Path { get; private set; }    public int Percent { get; private set; }    public int FileCount { get; set; }    public long Size { get; set; }                Lazy<DirUseInfo[]> subDirs;    public DirUseInfo[] SubDirs { get { return subDirs.Value; } }    private DirUseInfo(string path, long size, int fileCount,int percent)    {        this.Path = path;        this.Size = size;        this.FileCount = fileCount;        this.Percent = percent;        this.subDirs = fileCount == 0 ? new Lazy<DirUseInfo[]>() : new Lazy<DirUseInfo[]>(() => GetDirUseInfo(path));    }    public override string ToString()    {        return string.Format("[{0}% {1} {2}]", Percent, Size, Path);    }    public static DirUseInfo[] GetDirUseInfo(string dir)    {        var subDirs = Directory.GetDirectories(dir);        var p = Process.Start(new ProcessStartInfo(@"D:\Tools\Du\diruse.exe", @"/* " + dir)        {            UseShellExecute = false,            RedirectStandardOutput = true,        });            p.WaitForExit();        var output = p.StandardOutput.ReadToEnd();        var matches = Regex.Matches(output, @"(\d+|Access Denied)\s+(\d+).+");        if(subDirs.Length!=matches.Count-1)    //match最后一项是汇总            throw new InvalidOperationException();        var totalSize = long.Parse(matches[matches.Count - 1].Groups[1].Value);        var dirsUseInfo = new DirUseInfo[subDirs.Length];        for (int i = 0; i < dirsUseInfo.Length; i++)        {            var groups = matches[i].Groups;            var path = subDirs[i];            var fileCount = int.Parse(groups[2].Value);            var size = matches[i].Value.StartsWith("Access Denied") ? 0 : long.Parse(groups[1].Value);            var percent = (int)(size * 100 / totalSize);            dirsUseInfo[i] = new DirUseInfo(path, size, fileCount, percent);        }        return dirsUseInfo;    }}

到此,相信大家对“C#如何获取文件夹所占空间大小的功能”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯