您好,登錄后才能下訂單哦!
本篇內容主要講解“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#如何獲取文件夾所占空間大小的功能”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。