//功能:获取文件夹大小
//参数:
// lpFolderPath 文件夹路径
DWORD64 GetFolderSize(IN PTCHAR lpFolderPath)
{
WIN32_FIND_DATA FileData;
wstring strFileName;
TCHAR stTempPath[MAX_PATH] = {0}; // 递归的时候用到的临时参数
DWORD64 dwFileSize = 0;
strFileName = lpFolderPath;
if ( 0 == strFileName.size())
{
return FALSE;
}
if (3 == strFileName.size() && L'\\' == strFileName[2])
{
strFileName += L"*";
}
else
{
strFileName += L"\\*";
}
HANDLE hLisFile =::FindFirstFile(strFileName.data(),&FileData);
if (INVALID_HANDLE_VALUE == hLisFile)
{
return 0;
}
do
{
if(!lstrcmp(FileData.cFileName,L".") || !lstrcmp(FileData.cFileName,L".."))
{
continue;
}
if(FileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
wsprintf(stTempPath,L"%s%s%s",lpFolderPath,L"\\",FileData.cFileName);
// 开始递归
dwFileSize += GetFolderSize(stTempPath);
}
else
{
// 高低字位的组合
DWORD64 dwFileTempHigh = FileData.nFileSizeHigh;
DWORD64 dwFileTempLow = FileData.nFileSizeLow;
dwFileTempHigh = (dwFileTempHigh<<32);
dwFileTempHigh = (dwFileTempHigh|dwFileTempLow);
dwFileSize += dwFileTempHigh;
}
} while (::FindNextFile(hLisFile,&FileData));
::FindClose(hLisFile);
return dwFileSize;
}
Win7平台,vs2010工具测试通过