在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);
答案 0 :(得分:3)
据我所知,没有API函数可以直接检索文件夹的大小。你必须迭代包含的文件。
修改强> 在SO上考虑类似的问题:
答案 1 :(得分:2)
您的问题有几个答案,但其中一个主要是技术性问题。
第一种方法是使用NtQueryInformationFile
(或zwQueryInformationFile
)来收集数据。这可以在单个调用中返回目录中所有文件的信息,从而避免了正常函数所需的循环。使用有点棘手 - 文档主要用于设备驱动程序。使用它的应用程序是本机应用程序而不是Win32。这方面的文档很少。
第二种可能性是编写循环,但使用FindFirstFile
而不是FindFirstFileEx
。这允许您指定FindExInfoBasic
和FIND_FIRST_EX_LARGE_FETCH
来优化检索,因为您不需要cAlternateFilename
并且将枚举目录中的所有文件,因此它应该读取尽可能多的文件尽可能相关数据。