65.9K
CodeProject 正在变化。 阅读更多。
Home

磁盘使用情况查看器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.63/5 (16投票s)

2006年9月26日

CPOL

2分钟阅读

viewsIcon

81437

downloadIcon

2480

一个带有树形视图输出的磁盘使用量查看器。

DiskUse example screen image

引言

这是一个磁盘使用量查看器,一个帮助回答“我的磁盘空间都去哪儿了?”这个问题的工具。它从指定的文件夹开始显示一个文件夹(目录)树,并列出每个文件夹包含的所有内容的大小。文件夹按大小降序排列。树可以展开以显示顶层之下的层级。

背景

这个工具的灵感来自 Unix 磁盘使用量工具 du。缺乏令人满意的、等效的、常用的 Windows 工具促使我编写了这个工具。

使用代码

使用该工具很简单

  1. 点击选择,然后选择要检查的驱动器或文件夹。
  2. 展开显示的列表中的任何文件夹,以查看其内容的详细信息。
  3. 使用复制菜单保存显示树的文本表示形式,或复制所选文件夹的路径。

生成的树的文本表示形式如下

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 日:创建。
© . All rights reserved.