您的位置:首页 > 其它

【路径相关方法】4,计算文件夹大小

2014-01-28 12:56 232 查看

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: