【路径相关方法】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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆枫゛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值