- #include <Windows.h>
- #include <stdio.h>
- #include <tchar.h>
- LARGE_INTEGER lgAllSubFolderFileSize;
- LARGE_INTEGER lgEachTempFileSize;
- DWORD dwTotalFolderNum=0;
- DWORD dwTotalFileNum=0;
- int ListFolderTotalFileSize(LPCTSTR lpTempPath)
- {
- TCHAR tchFindArray[MAX_PATH]= {_T(" ")};
- WIN32_FIND_DATA wFileDataAttr;
- BOOL bRet;
- _tcscpy_s(tchFindArray,MAX_PATH, lpTempPath);
- _tcscat_s(tchFindArray,_T("\*.*"));
- HANDLE hFind= ::FindFirstFile(tchFindArray,&wFileDataAttr);
- if (INVALID_HANDLE_VALUE== hFind)
- {
- return -1;
- }
- while (TRUE)
- {
- if (wFileDataAttr.cFileName[0]!= _T('.'))
- {
- //_tprintf(_T("%s\%s "),lpTempPath, findFileData.cFileName);
- lgEachTempFileSize.LowPart=wFileDataAttr.nFileSizeLow;
- lgEachTempFileSize.HighPart=wFileDataAttr.nFileSizeHigh;
- lgAllSubFolderFileSize.QuadPart=lgAllSubFolderFileSize.QuadPart+lgEachTempFileSize.QuadPart;
- dwTotalFileNum=dwTotalFileNum+1;
- if (wFileDataAttr.dwFileAttributes& FILE_ATTRIBUTE_DIRECTORY)
- {
- _tcscpy_s(tchFindArray,MAX_PATH,lpTempPath);
- _tcscat_s(tchFindArray,_T("\"));
- _tcscat_s(tchFindArray,wFileDataAttr.cFileName);
- dwTotalFolderNum=dwTotalFolderNum+1;
- ListFolderTotalFileSize(tchFindArray);
- }
- }
- bRet= ::FindNextFile(hFind,&wFileDataAttr);
- if (!bRet)
- {
- break;
- }
- }
- ::FindClose(hFind);
- return 1;
- }
- BOOL IsAscii2Unicode(const char * pstring,TCHAR pwText[])
- {
- DWORD dwLengthNum = MultiByteToWideChar (CP_ACP, 0, pstring, -1, NULL, 0);
- TCHAR *pwTempText = new TCHAR[dwLengthNum+1];
- ZeroMemory((PVOID)pwTempText,2*(dwLengthNum+1));
- if(pwTempText==NULL)
- {
- delete[] pwTempText;
- pwTempText=NULL;
- return FALSE;
- }
- if(0==MultiByteToWideChar (CP_ACP, 0, pstring, -1, (LPWSTR)pwTempText, dwLengthNum))
- {
- delete [] pwTempText;
- pwTempText=NULL;
- return FALSE;
- }
- else
- {
- lstrcpy(pwText,pwTempText);
- delete [] pwTempText;
- pwTempText=NULL;
- return TRUE;
- }
- }
- int main(int argc,_TCHAR * argv[])
- {
- TCHAR tchCommand0[MAX_PATH]={0};
- TCHAR tchCommand1[MAX_PATH]={0};
- TCHAR tchCommand2[MAX_PATH]={0};
- lgAllSubFolderFileSize.QuadPart=0L;
- lgEachTempFileSize.QuadPart=0L;
- BOOL bRet=IsAscii2Unicode((const char* )argv[0],tchCommand0);
- if (argc!=3)
- {
- wprintf(_T("example: "));
- wprintf(_T(" "));
- wprintf(tchCommand0);
- wprintf(_T(" <-dir> d:\temp\ "));
- return -1;
- }
- else
- {
- bRet=IsAscii2Unicode((const char* )argv[1],tchCommand1);
- if(bRet==FALSE)
- {
- wprintf(_T("argv convert fails "));
- return -1;
- }
- bRet=IsAscii2Unicode((const char* )argv[2],tchCommand2);
- if(bRet==FALSE)
- {
- wprintf(_T("argv convert fails "));
- return -1;
- }
- if((lstrcmp(tchCommand1,_T("-dir"))==0))
- //
- {
- DWORD dwRetSize=ListFolderTotalFileSize(tchCommand2);
- if (dwRetSize==-1)
- {
- _tprintf(_T("Open file failed "));
- return 1;
- }
- else
- {
- _tprintf(_T("NUMB SIZE : %u DIRES "),dwTotalFolderNum);
- _tprintf(_T("NUMB SIZE : %u FILES "),dwTotalFileNum);
- _tprintf(_T("FILE SIZE : %u BYTES "),lgAllSubFolderFileSize.QuadPart);
- //
- UINT uMaxSize=0;
- if(lgAllSubFolderFileSize.QuadPart<1024)
- {
- uMaxSize=lgAllSubFolderFileSize.QuadPart;
- _tprintf(_T("FILE SIZE : %.4u BYTE "),(uMaxSize));
- }
- else if ((lgAllSubFolderFileSize.QuadPart>1024)&&(lgAllSubFolderFileSize.QuadPart<1024*1024))
- {
- uMaxSize=lgAllSubFolderFileSize.QuadPart/1024;
- _tprintf(_T("FILE SIZE : %.4u KB "),(uMaxSize));
- }
- else if((lgAllSubFolderFileSize.QuadPart>1024*1024)&&(lgAllSubFolderFileSize.QuadPart<1024*1024*1024L))
- {
- uMaxSize=lgAllSubFolderFileSize.QuadPart/1024/1024;
- _tprintf(_T("FILE SIZE : %.4u MB "),(uMaxSize));
- }
- else
- {
- float fSize;
- fSize=(float)lgAllSubFolderFileSize.QuadPart/1024/1024/1024;
- _tprintf(_T("FILE SIZE : %.2f GB "),(fSize));
- }
- return 1;
- }
- }
- else
- {
- return 1;
- }
- }
- }
http://blog.csdn.net/microzone/article/details/49883783