中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#如何獲取文件夾所占空間大小的功能

發布時間:2022-06-18 13:56:49 來源:億速云 閱讀:182 作者:iii 欄目:開發技術

本篇內容主要講解“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#如何獲取文件夾所占空間大小的功能”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

象山县| 抚顺县| 托克逊县| 屏东市| 宣化县| 衡水市| 保德县| 周口市| 乌鲁木齐县| 龙川县| 仙居县| 枣强县| 福安市| 开封市| 宜宾市| 临潭县| 全椒县| 永嘉县| 嵊泗县| 清徐县| 遂川县| 吕梁市| 科技| 敦煌市| 乐至县| 田东县| 嘉祥县| 西林县| 九台市| 棋牌| 南和县| 文山县| 临沭县| 承德市| 鹤庆县| 青田县| 荔波县| 多伦县| 偃师市| 和硕县| 赣榆县|