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

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;
}


你可能感兴趣的:(【路径相关方法】4,计算文件夹大小)