1,原理
与前文一样,使用FindFirstFile和FindNextFile 遍历文件夹,通过把所有文件大小相加,得到总大小。
2,实现
32位无符号整数,能表示的大小为:2^32-1 = 4294967295 字节即4GB。
那么大于4GB的得用64位整数表示了,这里用DWORD64,即无符号64位整数。
DWORD64 GetFolderSize(WCHAR* szPath)
{
DWORD64 dwSize = 0;
//拷贝一份局部路径
WCHAR szFilePath[MAX_PATH] = {0};
wcscpy_s(szFilePath,MAX_PATH,szPath);
//要查找的所有文件的通配符
WCHAR szFileFilter[MAX_PATH] = {0};
wcscpy_s(szFileFilter,MAX_PATH,szFilePath);
wcscat_s(szFileFilter,MAX_PATH,L"\\*.*");
WIN32_FIND_DATA fileinfo;
HANDLE hFind = NULL;
hFind = FindFirstFile(szFileFilter,&fileinfo);
do
{
if(fileinfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if ((0 != wcscmp(fileinfo.cFileName,L".")) && (0 != wcscmp(fileinfo.cFileName,L"..")))
{
//除了"."和".."的文件夹,递归求文件夹大小相加
wcscat_s(szFilePath,MAX_PATH,fileinfo.cFileName);
dwSize += GetFolderSize(szFilePath);
}
}
else
{
//是文件,直接加上大小
DWORD64 dwFileSize = ((DWORD64)(fileinfo.nFileSizeHigh) * (MAXDWORD+1)) + (DWORD64)(fileinfo.nFileSizeLow);
dwSize += dwFileSize;
}
}while(FindNextFile(hFind,&fileinfo));
FindClose(hFind);
return dwSize;
}