[置顶] win32命令行小程序获取指定文件夹或者目录下面的所有文件大小,文件数量,目录数量
2015-11-17 10:08
976 查看
#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("\0")};
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\n"),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:\n"));
wprintf(_T("\t"));
wprintf(tchCommand0);
wprintf(_T(" <-dir> d:\\temp\\\n"));
return -1;
}
else
{
bRet=IsAscii2Unicode((const char* )argv[1],tchCommand1);
if(bRet==FALSE)
{
wprintf(_T("argv convert fails\n"));
return -1;
}
bRet=IsAscii2Unicode((const char* )argv[2],tchCommand2);
if(bRet==FALSE)
{
wprintf(_T("argv convert fails\n"));
return -1;
}
if((lstrcmp(tchCommand1,_T("-dir"))==0))
//
{
DWORD dwRetSize=ListFolderTotalFileSize(tchCommand2);
if (dwRetSize==-1)
{
_tprintf(_T("Open file failed \n"));
return 1;
}
else
{
_tprintf(_T("NUMB SIZE : %u DIRES \n"),dwTotalFolderNum);
_tprintf(_T("NUMB SIZE : %u FILES \n"),dwTotalFileNum);
_tprintf(_T("FILE SIZE : %u BYTES \n"),lgAllSubFolderFileSize.QuadPart);
//
UINT uMaxSize=0;
if(lgAllSubFolderFileSize.QuadPart<1024)
{
uMaxSize=lgAllSubFolderFileSize.QuadPart;
_tprintf(_T("FILE SIZE : %.4u BYTE \n"),(uMaxSize));
}
else if ((lgAllSubFolderFileSize.QuadPart>1024)&&(lgAllSubFolderFileSize.QuadPart<1024*1024))
{
uMaxSize=lgAllSubFolderFileSize.QuadPart/1024;
_tprintf(_T("FILE SIZE : %.4u KB \n"),(uMaxSize));
}
else if((lgAllSubFolderFileSize.QuadPart>1024*1024)&&(lgAllSubFolderFileSize.QuadPart<1024*1024*1024L))
{
uMaxSize=lgAllSubFolderFileSize.QuadPart/1024/1024;
_tprintf(_T("FILE SIZE : %.4u MB \n"),(uMaxSize));
}
else
{
float fSize;
fSize=(float)lgAllSubFolderFileSize.QuadPart/1024/1024/1024;
_tprintf(_T("FILE SIZE : %.2f GB \n"),(fSize));
}
return 1;
}
}
else
{
return 1;
}
}
}
相关文章推荐
- 超简单--仿微信朋友圈展开显示更多文字功能
- Android实现微信录制小视频的计时动画
- 微信支付 出现 签名错误 有可能的原因是因为参数中含有空格
- 026.LinkedList底层详解
- 微信私房菜走红 外卖、用户、监管三方皆受伤
- 微信开发:自动回复和多客服开发
- 高仿微信5.2.1主界面及消息提醒(fragment+viewPager+BadgeView)
- iOS9.0 微信、QQ分享提示未安装
- 微信里去掉下拉select的边框
- 微信JS SDK使用权限签名算法 jsapi_ticket
- 微信支付-“申请退款”接口遇到curl出错,错误码:58
- 微信随机红包的计算
- 解决手机浏览器和微信中select中border:none;无用和去掉小三角
- 微信开发
- 微信分享问题纪录
- Android应用接入微信开放平台
- 玩转微信2次开发1_交互通信api.php(微擎版)
- 微信营销打假-携程帮忙砍一刀
- java---金额中文大小写实时转换小程序
- java---金额中文大小写实时转换小程序