如何通过Windows API获取文件夹大小

时间:2013-08-29 06:40:25

标签: c++ windows

在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);

2 个答案:

答案 0 :(得分:3)

据我所知,没有API函数可以直接检索文件夹的大小。你必须迭代包含的文件。

修改 在SO上考虑类似的问题:

答案 1 :(得分:2)

您的问题有几个答案,但其中一个主要是技术性问题。

第一种方法是使用NtQueryInformationFile(或zwQueryInformationFile)来收集数据。这可以在单个调用中返回目录中所有文件的信息,从而避免了正常函数所需的循环。使用有点棘手 - 文档主要用于设备驱动程序。使用它的应用程序是本机应用程序而不是Win32。这方面的文档很少。

第二种可能性是编写循环,但使用FindFirstFile而不是FindFirstFileEx。这允许您指定FindExInfoBasicFIND_FIRST_EX_LARGE_FETCH来优化检索,因为您不需要cAlternateFilename并且将枚举目录中的所有文件,因此它应该读取尽可能多的文件尽可能相关数据。