int GetFolderSize(CString strFolder, BOOL bSubfolders) { // Declare variables int iSize = 0; CString strFilePath, sPattern; HANDLE hFile; WIN32_FIND_DATA FileInformation; // Get pattern sPattern = strFolder + TEXT("\\*.*"); hFile = ::FindFirstFile(sPattern, &FileInformation); if (hFile != INVALID_HANDLE_VALUE) { do { // Is it something else then current folder? if (FileInformation.cFileName[0] != TEXT('.')) { // Set up path strFilePath = strFolder + TEXT("\\") + FileInformation.cFileName; // Is it a folder? if (FileInformation.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { // Should we search subdirectories too? if (bSubfolders) { // Search subdirectory int iRS = GetFolderSize(strFilePath, bSubfolders); // Check result of function iSize += iRS; } } else { // Increase size if (FileInformation.nFileSizeHigh > 0) { iSize += (FileInformation.nFileSizeHigh * MAXDWORD) + FileInformation.nFileSizeLow; } else { iSize += FileInformation.nFileSizeLow; } } } } while (::FindNextFile(hFile, &FileInformation) == TRUE); // Close handle ::FindClose(hFile); } // Return count return iSize; }
INT64 GetFolderSize(LPCTSTR szFolder, BOOL bIncludeChild, FolderFilter fn) { WIN32_FIND_DATA FindFileData; HANDLE hFind = INVALID_HANDLE_VALUE; CString strFolder(szFolder); strFolder.Append( _T("\\*") ); INT64 folderSize = 0; hFind = FindFirstFile(strFolder, &FindFileData); if (hFind != INVALID_HANDLE_VALUE) { printf ("First file name is %s\n", FindFileData.cFileName); do { printf ("Next file name is %s\n", FindFileData.cFileName); if( _tcsicmp(_T("."), FindFileData.cFileName)==0 || _tcsicmp(_T(".."), FindFileData.cFileName)==0 ) { continue; } if( FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) { if( bIncludeChild ) { CString strResult = szFolder; LPCTSTR pszResult; LPCTSTR pchLast; pszResult = strResult; pchLast = _tcsdec( pszResult, pszResult+strResult.GetLength() ); ATLASSERT(pchLast!=NULL); if ((*pchLast != _T('\\')) && (*pchLast != _T('/'))) strResult += _T('\\'); strResult += FindFileData.cFileName; folderSize += GetFolderSize( strResult, bIncludeChild ); } } else { if( !fn || fn(szFolder, FindFileData.cFileName) ) { ULARGE_INTEGER nFileSize; nFileSize.LowPart = FindFileData.nFileSizeLow; nFileSize.HighPart = FindFileData.nFileSizeHigh; folderSize += nFileSize.QuadPart; } } } while (FindNextFile(hFind, &FindFileData) != 0); FindClose(hFind); } return folderSize; }
double FileMisc::GetFolderSize(const TCHAR* szFolder, BOOL bIncludeSubFolders, const TCHAR* szFileMask, HANDLE hTerminate, BOOL bProcessMsgLoop) { // if the dir does not exists just return if (!FolderExists(szFolder)) { return 0; } double dSize = 0; WIN32_FIND_DATA finfo; CString sSearchSpec(szFolder), sFileMask(szFileMask); if (sFileMask.IsEmpty()) { sFileMask = "*.*"; } TerminatePath(sSearchSpec); sSearchSpec += sFileMask; BOOL bStopped = (WaitForSingleObject(hTerminate, 0) == WAIT_OBJECT_0); HANDLE h = NULL; if (!bStopped && (h = FindFirstFile(sSearchSpec, &finfo)) != INVALID_HANDLE_VALUE) { do { if (bProcessMsgLoop) { Misc::ProcessMsgLoop(); } if (finfo.cFileName[0] != '.') { if (finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (bIncludeSubFolders) { CString sSubFolder(szFolder); sSubFolder += "\\"; sSubFolder += finfo.cFileName; dSize += GetFolderSize(sSubFolder, TRUE, sFileMask, hTerminate, bProcessMsgLoop); } } else { dSize += (finfo.nFileSizeHigh * ((double)MAXDWORD + 1)) + finfo.nFileSizeLow; } } bStopped = (WaitForSingleObject(hTerminate, 0) == WAIT_OBJECT_0); } while (!bStopped && FindNextFile(h, &finfo)); FindClose(h); } return bStopped ? -1 : dSize; }
BOOL FolderSize::GetFolderSize(LPCTSTR Path, int* folderCount, int* fileCount, ULARGE_INTEGER& folderSize) { if(_tcslen(Path) < 4) return FALSE; //if ((_tcslen(Path) < 4)) //{ // //za cijeli disk // ULARGE_INTEGER ulFreeCaller; // ulFreeCaller.QuadPart = 0; // ULARGE_INTEGER ulTotal; // ulTotal.QuadPart = 0; // ULARGE_INTEGER ulFree; // ulFree.QuadPart = 0; // rc = GetDiskFreeSpaceEx(lpszStartFolder, &ulFreeCaller, &ulTotal, &ulFree); // lpFolderSize->QuadPart = ulTotal.QuadPart - ulFree.QuadPart; // return rc; //} HANDLE hFF = 0; WIN32_FIND_DATA wfd = { 0 }; TCHAR szPath[2000]; ULARGE_INTEGER li_total; li_total.QuadPart = 0; int dwTotalFolderCount = 0; int dwTotalFileCount = 0; _tcsncpy(szPath, Path, sizeof(szPath)/sizeof(TCHAR)-1); _tcscat(szPath, _T("\\*")); hFF = FindFirstFile(szPath, &wfd); if (hFF != INVALID_HANDLE_VALUE) { do { _tcsncpy(szPath, Path, sizeof(szPath)/sizeof(TCHAR)-1); _tcscat(szPath, _T("\\")); _tcscat(szPath, wfd.cFileName); if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (_tcscmp(wfd.cFileName, _T(".")) && _tcscmp(wfd.cFileName, _T("..")) ) { // rekurzija ako je direktorij ULARGE_INTEGER li; li.QuadPart = 0; int dwFolderCount = 0; int dwFileCount = 0; GetFolderSize(szPath,&dwFolderCount, &dwFileCount, li); li_total.QuadPart += li.QuadPart; dwTotalFolderCount += dwFolderCount + 1; dwTotalFileCount += dwFileCount; } } else { LARGE_INTEGER li; li.HighPart=wfd.nFileSizeHigh; li.LowPart=wfd.nFileSizeLow; //rc = GetFileSize(szPath, &li); li_total.QuadPart += li.QuadPart; dwTotalFileCount += 1; } } while (FindNextFile(hFF, &wfd)); } folderSize = li_total; if (folderCount) *folderCount = dwTotalFolderCount; if (fileCount) *fileCount = dwTotalFileCount; return TRUE; }