如何通过Windows API获取文件夹大小
How to get a folder size via Windows API
在Windows操作系统上,我们可以右键单击文件夹,它将显示包含文件夹大小信息的属性信息。现在,我想使用Windows API来获取文件夹大小,我不想使用FindFirstFile/FindNextFile来枚举所有文件。提前谢谢。
我尝试了下面的代码,但是,它返回的大小是无效数据。
HANDLE hFile = CreateFile(tsFolderPath.c_str(), GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_BACKUP_SEMANTICS, NULL);
LARGE_INTEGER fileSize;
GetFileSizeEx(hFile, &fileSize);
CloseHandle(hFile);
据我所知,没有API函数可以直接检索文件夹的大小。您必须对包含的文件进行迭代。
编辑:考虑SO:上的类似问题
- 如何查找文件夹中所有文件的大小
- 目录的大小
您的问题有几个答案,尽管其中一个主要是技术性的。
第一种方法是使用NtQueryInformationFile
(或zwQueryInformationFile
)来收集数据。这可以在一次调用中返回目录中所有文件的信息,避免了正常函数所需的循环。不过,使用起来有些棘手——文档主要针对设备驱动程序。使用它的应用程序是本机应用程序,而不是Win32。这方面的文档是最少的。
第二种可能性是编写一个循环,但使用FindFirstFileEx
而不是FindFirstFile
。这使您可以指定FindExInfoBasic
和FIND_FIRST_EX_LARGE_FETCH
来优化检索,因为您不需要cAlternateFilename
,并且将枚举目录中的所有文件,因此它应该一次读取尽可能多的相关数据。
相关文章:
- [android ndk]如何获取资产文件夹中文件的绝对路径?
- 使用内置的Windows方法获取文件夹的内容
- 获取 exe 文件夹路径的最佳方法?
- 如何在C#或C++中获取文件或文件夹的有效权限?有什么 API 吗?
- Qt TreeView获取总行数,考虑展开和折叠的文件夹
- 从 FutureAccessList 同步获取文件夹路径
- 如何使用 Win API 获取文件夹中的文件列表(带过滤器)
- 从Windows上的系统工作的服务中获取用户文档文件夹.C++
- 通过文件资源管理器获取文件夹目录
- 使用 std::regex_search 获取与模式匹配的所有文件和文件夹
- 如何在QT中获取Windows默认文件夹的本地名称
- C 获取目录路径,解析文件夹名称和来自Parent Directory的打印文件内容
- 如何在低文件夹中获取IE cookie
- 如何从文件夹中获取文件名,并将它们添加到QT中的孩子中
- 读取文件夹中的文件列表时获取分段折叠
- 如何获取哪些快捷方式和文件在桌面等文件夹路径中突出显示
- 通过浏览按钮仅获取文件夹路径
- 如何在Windows中为当前用户获取库文件夹列表
- ShellExecute获取打开文件夹的访问权限
- 如何使用C或C++函数获取特定文件夹中的文件数