在Windows操作系统上,我们可以右键单击某个文件夹,它将显示包含文件夹大小信息的属性信息。现在,我想使用Windows API来获取文件夹大小,我不想使用FindFirstFile/FindNextFile来枚举所有文件。提前致谢。如何通过Windows API获取文件夹大小
我试过下面的代码,但是,它返回一个无效数据的大小。
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);
你知道属性页更新“文件夹大小”以及枚举包含的文件,不是吗?所以它仍然使用你想避免的FindFirstFile。你也必须这样做。 –
@RomanR是什么。说的是真的。当您打开包含数千个文件和子文件夹的文件夹的属性页时,您将看到文件夹大小不断更新。 – mrt
@RomanR。实际上,我尝试了枚举方法,但是,它似乎与系统磁盘上的操作系统属性结果(例如C:\)没有太大的一致性,我发现因为某些带有FILE_ATTRIBUTE_REPARSE_POINT的文件是一个符号链接,它将被计为两次。但是,我过滤后。我发现结果与OS不一样。并且有一些文件属性(http://msdn.microsoft.com/en-us/library/windows/desktop/gg258117(v=vs.85).aspx)那么正确的方法是什么?谢谢! –