win32命令行小程序获取指定文件夹或者目录下面的所有文件大小,文件数量,目录数量
#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; } } }
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇: C++ Builder全部常用的API函数大全 (整理收藏)