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

来源:互联网 发布:js获取input上传文件 编辑:程序博客网 时间:2024/06/10 15:17

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
原创粉丝点击