最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2022年06月18日 09:33:11   作者:天方  
這篇文章介紹了C#獲取文件夾所占空間大小的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

雖然現(xiàn)在硬盤越來越大,但是清理垃圾還是必要的。這時我們往往需要一個獲取文件夾所占空間大小的功能,從而判斷垃圾文件的位置。

這個時候,我們常用的在右鍵屬性中查看文件夾所占空間的方法顯得效率實在太低。往往需要一些工具來輔助實現(xiàn)這個功能。一般有兩個工具可以實現(xiàn)這個功能:diruse和du。diruse是MS在系統(tǒng)中的一個附加的工具,du是sysinternals公司的,不過sysinternals好像已經(jīng)被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#把diruse的輸出封裝和匹配了一下,使其生成一個DirUseInfo的對象,利用diruse的輸出獲取了一些常用的信息。從而可以集成到windows程界面的程序中去。我自己用的時候是用wpf寫了一個界面的,不過還不是很令人滿意,就不獻(xiàn)丑了。這里就僅僅提供一下diruse的封裝,以供有同樣需求的朋友參考。

到此這篇關(guān)于C#獲取文件夾所占空間大小的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#中將xml文件反序列化為實例時采用基類還是派生類的知識點討論

    C#中將xml文件反序列化為實例時采用基類還是派生類的知識點討論

    在本篇文章里小編給大家整理的是關(guān)于C#中將xml文件反序列化為實例時采用基類還是派生類的知識點討論,有需要的朋友們學(xué)習(xí)下。
    2019-11-11
  • C#在新建線程中使用Timer無效問題及解決

    C#在新建線程中使用Timer無效問題及解決

    這篇文章主要介紹了C#在新建線程中使用Timer無效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 深入C#中使用SqlDbType.Xml類型參數(shù)的使用詳解

    深入C#中使用SqlDbType.Xml類型參數(shù)的使用詳解

    本篇文章是對在C#中使用SqlDbType.Xml類型參數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#實現(xiàn)將CSV轉(zhuǎn)為XLSX文件

    C#實現(xiàn)將CSV轉(zhuǎn)為XLSX文件

    Microsoft?Excel的XLSX格式以及基于文本的CSV(逗號分隔值)格式,是數(shù)據(jù)交換中常見的文件格式,本文主要介紹了如何在C#中以編程的方式將CSV文件轉(zhuǎn)化為XLSX?文件,需要的可以參考下
    2024-03-03
  • C#中foreach原理以及模擬的實現(xiàn)

    C#中foreach原理以及模擬的實現(xiàn)

    這篇文章主要介紹了C#中foreach原理以及模擬的實現(xiàn)方法,備有詳盡的注釋,便于深入理解C#原理,需要的朋友可以參考下
    2014-10-10
  • C# IEnumerable和IEnumerator接口淺析

    C# IEnumerable和IEnumerator接口淺析

    本文主要介紹了C#中IEnumerable和IEnumerator接口的相關(guān)知識,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • C#之CLR內(nèi)存字符串常量池(string)

    C#之CLR內(nèi)存字符串常量池(string)

    這篇文章主要介紹了C#之CLR內(nèi)存字符串常量池(string),對于學(xué)習(xí)和理解C#內(nèi)存原理很有幫助,需要的朋友可以參考下
    2014-08-08
  • 深入理解C#中foreach遍歷的使用方法

    深入理解C#中foreach遍歷的使用方法

    在c#中通過foreach遍歷一個列表是經(jīng)常拿用的方法,使用起來也方便,下面這篇文章先給大家介紹了關(guān)于C#中foreach遍歷的使用方法,后面介紹了c#使用foreach注意的一些是,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-08-08
  • C#設(shè)計模式之觀察者模式實例講解

    C#設(shè)計模式之觀察者模式實例講解

    這篇文章主要介紹了C#設(shè)計模式之觀察者模式實例講解,本文詳細(xì)講解了觀察者模式的定義、優(yōu)缺點、代碼實例等,需要的朋友可以參考下
    2014-10-10
  • C#中Linq的入門教程

    C#中Linq的入門教程

    這篇文章介紹了C#中Linq的基礎(chǔ)操作,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05

最新評論

武隆县| 衡阳市| 台南县| 廉江市| 交城县| 南丰县| 永川市| 南岸区| 西丰县| 瓦房店市| 温州市| 宝清县| 共和县| 陇西县| 英超| 恭城| 侯马市| 安新县| 宁陕县| 邵阳县| 黄浦区| 阿图什市| 班戈县| 仁寿县| 乐山市| 安丘市| 滦南县| 宝兴县| 鹤岗市| 封开县| 固阳县| 新野县| 达尔| 武夷山市| 府谷县| 公主岭市| 沅江市| 都兰县| 瑞安市| 龙川县| 北宁市|