在Windows中,有没有比迭代所有子目录更快的方法来获取目录大小

Is there any faster way to get a directory size in Windows than iterate over all its children?

本文关键字:方法 获取 子目录 Windows 有没有 迭代      更新时间:2023-10-16

我的程序需要获得所有子目录和子文件的目录大小,它通过递归枚举该目录中的所有对象并求和大小来实现这一点。但是,性能对于大目录来说是不可接受的。它比Windows资源管理器目录属性计算的大小要长,而且会导致硬盘发出更多的嘎嘎声。那么,我该如何优化这个过程呢?有合适的WinAPI函数或方法吗?

遍历目录中的文件是唯一通用的方法,Windows当然没有任何捷径可以做到这一点(在使用用户级权限运行的常规应用程序中,我不建议您的应用程序只需要管理员权限就可以运行!)。

如果目录包含大量文件,可能会有一点不同,这取决于你是对目录进行深度优先还是广度优先递归——广度优先需要"保存"要在当前目录中搜索的目录,当然,如果你有很多目录,这也会导致问题,深度优先的方法不需要任何存储,但意味着操作系统将同时打开更多的目录,并且可能会进行更多的头部移动。然而,这在很大程度上是一个边际差异。对于大型文件系统,"使用了多少空间"可能会有所不同——我实际上还没有尝试过。