在ASP.NET中獲取資料夾的大小
載至:MVPCN Blog 原作者:陝北吳旗娃
以CSDN上見到一個網友問怎麼獲取某個資料夾及子資料夾中所有文件的大小,在net框架1.0和1.1版的類庫中都沒有提供類似的方法或內容,所以只能自己來計算,下面是我寫的一個方法,通過遞歸獲取給定資料夾及其子資料夾中所有文件的大小,通過該方法取得的資料夾大小經過測試是正確的(與Windows視窗檔案總管中資料夾內容上顯示的大小值一樣),不過有一點不明白,資料夾內容上顯示的「佔用空間」值是怎麼計算的?下面是我的方法:
public long GetDirectoryLength(string dirPath){
if(!Directory.Exists(dirPath))
return 0;
long len=0;
DirectoryInfo di=new DirectoryInfo(dirPath);
foreach(FileInfo fi in di.GetFiles()){
len+=fi.Length;
}
DirectoryInfo[] dis=di.GetDirectories();
if(dis.Length>0){
for(int i=0;i<dis.Length;i++){
len+=GetDirectoryLength(dis[i].FullName);
}
}
return len;
}
完整的測試頁代碼:
<%@Page Language="C#" debug=true%>
<%@Import Namespace="System.IO"%>
<%@Register TagPrefix="www" Namespace="Wuqi.Webdiyer" Assembly="AspNetDatePicker"%>
<script runat="server">
void Page_Load(object src,EventArgs e){
if(!Page.IsPostBack){
Response.Write(GetDirectoryLength(@"C:\inetpub\wwwroot\webdiyer"));
}
}
long GetDirectoryLength(string dirPath){
if(!Directory.Exists(dirPath))
return 0;
long len=0;
DirectoryInfo di=new DirectoryInfo(dirPath);
foreach(FileInfo fi in di.GetFiles()){
len+=fi.Length;
}
DirectoryInfo[] dis=di.GetDirectories();
if(dis.Length>0){
for(int i=0;i<dis.Length;i++){
len+=GetDirectoryLength(dis[i].FullName);
}
}
return len;
}
</script>
<HTML>
<HEAD>
<TITLE> Webdiyer製造:) </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="Webdiyer">
</HEAD>
<BODY>
<form runat="server">
</form>
</BODY>
</HTML>
|