C#獲取文件夾所占空間大小的功能_第1頁(yè)
C#獲取文件夾所占空間大小的功能_第2頁(yè)
C#獲取文件夾所占空間大小的功能_第3頁(yè)
C#獲取文件夾所占空間大小的功能_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

這個(gè)時(shí)候,我們常用的在右鍵屬性中查看文件夾所占空間的方法顯得效率實(shí)在太低。往往需要一些工具來輔助實(shí)現(xiàn)這個(gè)功能。一般有兩個(gè)工具可以實(shí)現(xiàn)這個(gè)功能:diruse和du。diruse是MS在系統(tǒng)中的一個(gè)附加的工具,du是sysinternals公司的,不過sysinternals好像已經(jīng)被MS收購(gòu)了。這兩個(gè)工具都是命令行工具,但也保持著MS一貫的簡(jiǎn)單易用的特點(diǎn)。

這里以diruse為例介紹其用法:

diruse/M/*c:\OTHER

Size(mb)FilesDirectory

2.9114SUB-TOTAL:C:\OTHER\BusinessInfo

61.981309SUB-TOTAL:C:\OTHER\software

41.6041SUB-TOTAL:C:\OTHER\drivers

0.0221SUB-TOTAL:C:\OTHER\work

3.039SUB-TOTAL:C:\OTHER\config

0.003SUB-TOTAL:C:\OTHER\lnetwork

182.16537SUB-TOTAL:C:\OTHER\bkup

14.716SUB-TOTAL:C:\OTHER\vpnclient

1.8160SUB-TOTAL:C:\OTHER\info

817.20224SUB-TOTAL:C:\OTHER\tools

515.25449SUB-TOTAL:C:\OTHER\wtnfiles

3089.5010765SUB-TOTAL:C:\OTHER\MP3

4730.1813438TOTAL

可以非常直觀的看到各個(gè)文件夾所占的空間。

但是一個(gè)非常郁悶的地方是:這兩個(gè)程序都不支持中文,一旦碰到中文文件夾就暈菜了,無法顯示全部路徑。作為MS的官方工具,有這個(gè)bug確實(shí)讓人大跌眼鏡。沒辦法,我只好寫了個(gè)程序來糾正這個(gè)bug。

classDirUseInfo

publicstringPath{get;privateset;}

publicintPercent{get;privateset;}

publicintFileCount{get;set;}

publiclongSize{get;set;}

LazyDirUseInfo[]subDirs;

publicDirUseInfo[]SubDirs{get{returnsubDirs.Value;}}

privateDirUseInfo(stringpath,longsize,intfileCount,intpercent)

this.Path=path;

this.Size=size;

this.FileCount=fileCount;

this.Percent=percent;

this.subDirs=fileCount==0newLazyDirUseInfo[]():newLazyDirUseInfo[](()=GetDirUseInfo(path));

publicoverridestringToString()

returnstring.Format("[{0}%{1}{2}]",Percent,Size,Path);

publicstaticDirUseInfo[]GetDirUseInfo(stringdir)

varsubDirs=Directory.GetDirectories(dir);

varp=Process.Start(newProcessStartInfo(@"D:\Tools\Du\diruse.exe",@"/*"+dir)

UseShellExecute=false,

RedirectStandardOutput=true,

});

p.WaitForExit();

varoutput=p.StandardOutput.ReadToEnd();

varmatches=Regex.Matches(output,@"(\d+|AccessDenied)\s+(\d+).+");

if(subDirs.Length!=matches.Count-1)//match最后一項(xiàng)是匯總

thrownewInvalidOperationException();

vartotalSize=long.Parse(matches[matches.Count-1].Groups[1].Value);

vardirsUseInfo=newDirUseInfo[subDirs.Length];

for(inti=0;idirsUseInfo.Length;i++)

vargroups=matches[i].Groups;

varpath=subDirs[i];

varfileCount=int.Parse(groups[2].Value);

varsize=matches[i].Value.StartsWith("AccessDenied")0:long.Parse(groups[1].Value);

varpercent=(int)(size*100/totalSize);

dirsUseInfo[i]=newDirUseInfo(path,size,fileCount,percent);

returndirsUseInfo;

}

原理很簡(jiǎn)單,僅僅是用C#把diruse的輸出封裝和匹配了一下,使其生成一個(gè)DirUseInfo的對(duì)象,利用diruse的輸出獲取了一些常用的信息。從而可以集成

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論