.NET 中如何得到文件夹大小

Posted by NosaLee in .NET Programming, Common Programming on 24-04-2012. Tags: ,

作者:牧山道人
原文地址:http://www.seeksunslowly.com/dot-net-get-folder-size-sc
转载请注明出处,谢谢。
_____________________________________

.NET 自带程序集(本道使用 .NET 3.5)没有提供直接获取文件夹/目录大小的功能。
若用原生 .NET 程序集,需要遍历某目录及其所有子目录下所有文件才能获得该目录大小,效率低下且编码繁琐。

如果您之前搞过 VB6 编程,应该知道 Windows 各版本均自带了一个 COM 组件——Windows Script Host Object Model(wshom.ocx),该组件的 Folder 对象提供直接获得文件夹大小的方法。

下面以 VB 2008 为例,简要说明使用方法:

1、新建 Windows Form Application,打开其属性页,选择 References,点击 Add… -> Reference… 下拉按钮,如下图所示:
.NET 取得目录大小图一

2、在弹出对话框中选择 COM tab 页下的 Windows Script Host Object Model (Windows 脚本宿主对象模型),并点击确定,如下:
.NET 取得目录大小图二

3、这时,引用列表会增加一项 COM 引用:Windows Script Host Object Model,请选中此引用并按下<F4>双击 Path 属性,拷贝下该引用 .NET 外覆程序集全路径,如下:
.NET 取得目录大小图三

4、为了不直接操作 COM,我们把该项 COM 引用删掉(点击<Remove>按钮),转而引用其外覆 .NET 程序集,再次点击 Add… -> Reference… 下拉按钮,在弹出对话框的 Browse tab 页【File name】栏粘贴上一步拷贝到的相应外覆程序集全路径,并点击确定,如下:
.NET 取得目录大小图四

5、好了,此时您已经可以经由该外覆程序集 Interop.IWshRuntimeLibrary 来直接获取目录大小了。代码如下:

1
2
3
4
5
6
7
Public Class Form1
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      Dim f As IWshRuntimeLibrary.Folder
      f = New IWshRuntimeLibrary.FileSystemObject().GetFolder("h:\test")
      MsgBox(f.Path & " " & f.Size & " Bytes") ' 注意其单位为字节,请根据需要进行换算。
   End Sub
End Class

6、运行结果如下:
.NET 取得目录大小图五

注:该方法不仅适用于 .NET,亦可应用于其他不直接提供文件夹大小查询接口的 Windows 编程语言,请参考实现。

Post a comment