磁盘使用情况查看器






4.63/5 (16投票s)
一个带有树形视图输出的磁盘使用量查看器。
引言
这是一个磁盘使用量查看器,一个帮助回答“我的磁盘空间都去哪儿了?”这个问题的工具。它从指定的文件夹开始显示一个文件夹(目录)树,并列出每个文件夹包含的所有内容的大小。文件夹按大小降序排列。树可以展开以显示顶层之下的层级。
背景
这个工具的灵感来自 Unix 磁盘使用量工具 du。缺乏令人满意的、等效的、常用的 Windows 工具促使我编写了这个工具。
使用代码
使用该工具很简单
- 点击选择,然后选择要检查的驱动器或文件夹。
- 展开显示的列表中的任何文件夹,以查看其内容的详细信息。
- 使用复制菜单保存显示树的文本表示形式,或复制所选文件夹的路径。
生成的树的文本表示形式如下
11.9 G C:
+ 4.16 G Program Files
+ 2.65 G Documents and Settings
+ 2.51 G WINNT
+ 1.08 G Matt
+ 68.4 M My Music
+ 28.3 M dell
+ 19.8 M Recycled
+ 18.4 M My Downloads
+ 10.3 M VXIPNP
+ 1.12 M samples
| + 1.12 M VC98
| + 1.12 M mfc
| + 846 K ole
| | + 846 K wordpad
| | + 27 K res
| | + 0 K UniDebug
| + 275 K general
| + 275 K LISTHDR
| + 33 K res
| + 0 K Release
+ 1 K cygwin
+ 0 K WUTemp
代码递归地探索所选根文件夹下方的文件夹结构,并相应地填充 Windows 树控件。该应用程序是一个由 AppWizard 生成的单文档(SDI)MFC 应用程序,使用 CTreeView
作为视图类。
大部分功能是在 CDiskUseView
类中实现的,该类与其底层的树控件具有密切的访问权限。菜单操作的事件处理程序出现在 CMainFrame
类中。
关注点
树,例如驱动器的文件夹结构,本质上是一种递归结构,因此使用树是递归编程技术的自然应用。函数 ScanDirectory
汇总目录中文件的总大小,并递归调用自身以查找其包含的目录的大小。函数 DisplaySubtree
写入树中一个文件夹的文本表示形式,并递归调用自身以获取更低的层级。函数 ExpandTreeLevel
递归调用自身以调整树控件视图,以便显示一个、两个或所有层级。
对于像这样的问题,使用递归可以用很少的代码实现所需的功能。递归方法最初可能看起来令人困惑,但它并不难。这个小程序可以作为一个如何实现的例子。
致谢
感谢 S. Sokolenko,他的 GetFolder
包装器用于 SHBrowseForFolder
,省去了我学习该操作细节的麻烦。
历史
- 2006 年 10 月 3 日:更新以处理包含句点的目录名称。
- 2006 年 9 月 26 日:创建。