win32命令行小程序获取指定文件夹或者目录下面的所有文件大小,文件数量,目录数量

时间:2022-08-27 14:37:14
  1. #include <Windows.h>
  2. #include <stdio.h>
  3. #include <tchar.h>
  4. LARGE_INTEGER       lgAllSubFolderFileSize;
  5. LARGE_INTEGER       lgEachTempFileSize;
  6. DWORD               dwTotalFolderNum=0;
  7. DWORD               dwTotalFileNum=0;
  8. int ListFolderTotalFileSize(LPCTSTR lpTempPath)
  9. {
  10. TCHAR tchFindArray[MAX_PATH]= {_T("\0")};
  11. WIN32_FIND_DATA wFileDataAttr;
  12. BOOL bRet;
  13. _tcscpy_s(tchFindArray,MAX_PATH, lpTempPath);
  14. _tcscat_s(tchFindArray,_T("\\*.*"));
  15. HANDLE hFind= ::FindFirstFile(tchFindArray,&wFileDataAttr);
  16. if (INVALID_HANDLE_VALUE== hFind)
  17. {
  18. return -1;
  19. }
  20. while (TRUE)
  21. {
  22. if (wFileDataAttr.cFileName[0]!= _T('.'))
  23. {
  24. //_tprintf(_T("%s\\%s\n"),lpTempPath, findFileData.cFileName);
  25. lgEachTempFileSize.LowPart=wFileDataAttr.nFileSizeLow;
  26. lgEachTempFileSize.HighPart=wFileDataAttr.nFileSizeHigh;
  27. lgAllSubFolderFileSize.QuadPart=lgAllSubFolderFileSize.QuadPart+lgEachTempFileSize.QuadPart;
  28. dwTotalFileNum=dwTotalFileNum+1;
  29. if (wFileDataAttr.dwFileAttributes& FILE_ATTRIBUTE_DIRECTORY)
  30. {
  31. _tcscpy_s(tchFindArray,MAX_PATH,lpTempPath);
  32. _tcscat_s(tchFindArray,_T("\\"));
  33. _tcscat_s(tchFindArray,wFileDataAttr.cFileName);
  34. dwTotalFolderNum=dwTotalFolderNum+1;
  35. ListFolderTotalFileSize(tchFindArray);
  36. }
  37. }
  38. bRet= ::FindNextFile(hFind,&wFileDataAttr);
  39. if (!bRet)
  40. {
  41. break;
  42. }
  43. }
  44. ::FindClose(hFind);
  45. return 1;
  46. }
  47. BOOL IsAscii2Unicode(const char * pstring,TCHAR pwText[])
  48. {
  49. DWORD dwLengthNum = MultiByteToWideChar (CP_ACP, 0, pstring, -1, NULL, 0);
  50. TCHAR *pwTempText = new TCHAR[dwLengthNum+1];
  51. ZeroMemory((PVOID)pwTempText,2*(dwLengthNum+1));
  52. if(pwTempText==NULL)
  53. {
  54. delete[] pwTempText;
  55. pwTempText=NULL;
  56. return FALSE;
  57. }
  58. if(0==MultiByteToWideChar (CP_ACP, 0, pstring, -1, (LPWSTR)pwTempText, dwLengthNum))
  59. {
  60. delete [] pwTempText;
  61. pwTempText=NULL;
  62. return FALSE;
  63. }
  64. else
  65. {
  66. lstrcpy(pwText,pwTempText);
  67. delete [] pwTempText;
  68. pwTempText=NULL;
  69. return TRUE;
  70. }
  71. }
  72. int  main(int argc,_TCHAR * argv[])
  73. {
  74. TCHAR tchCommand0[MAX_PATH]={0};
  75. TCHAR tchCommand1[MAX_PATH]={0};
  76. TCHAR tchCommand2[MAX_PATH]={0};
  77. lgAllSubFolderFileSize.QuadPart=0L;
  78. lgEachTempFileSize.QuadPart=0L;
  79. BOOL bRet=IsAscii2Unicode((const char* )argv[0],tchCommand0);
  80. if (argc!=3)
  81. {
  82. wprintf(_T("example:\n"));
  83. wprintf(_T("\t"));
  84. wprintf(tchCommand0);
  85. wprintf(_T(" <-dir> d:\\temp\\\n"));
  86. return -1;
  87. }
  88. else
  89. {
  90. bRet=IsAscii2Unicode((const char* )argv[1],tchCommand1);
  91. if(bRet==FALSE)
  92. {
  93. wprintf(_T("argv convert fails\n"));
  94. return -1;
  95. }
  96. bRet=IsAscii2Unicode((const char* )argv[2],tchCommand2);
  97. if(bRet==FALSE)
  98. {
  99. wprintf(_T("argv convert fails\n"));
  100. return -1;
  101. }
  102. if((lstrcmp(tchCommand1,_T("-dir"))==0))
  103. //
  104. {
  105. DWORD dwRetSize=ListFolderTotalFileSize(tchCommand2);
  106. if (dwRetSize==-1)
  107. {
  108. _tprintf(_T("Open file failed \n"));
  109. return 1;
  110. }
  111. else
  112. {
  113. _tprintf(_T("NUMB SIZE  : %u DIRES \n"),dwTotalFolderNum);
  114. _tprintf(_T("NUMB SIZE  : %u FILES \n"),dwTotalFileNum);
  115. _tprintf(_T("FILE SIZE  : %u BYTES \n"),lgAllSubFolderFileSize.QuadPart);
  116. //
  117. UINT uMaxSize=0;
  118. if(lgAllSubFolderFileSize.QuadPart<1024)
  119. {
  120. uMaxSize=lgAllSubFolderFileSize.QuadPart;
  121. _tprintf(_T("FILE SIZE : %.4u BYTE \n"),(uMaxSize));
  122. }
  123. else if ((lgAllSubFolderFileSize.QuadPart>1024)&&(lgAllSubFolderFileSize.QuadPart<1024*1024))
  124. {
  125. uMaxSize=lgAllSubFolderFileSize.QuadPart/1024;
  126. _tprintf(_T("FILE SIZE : %.4u KB \n"),(uMaxSize));
  127. }
  128. else if((lgAllSubFolderFileSize.QuadPart>1024*1024)&&(lgAllSubFolderFileSize.QuadPart<1024*1024*1024L))
  129. {
  130. uMaxSize=lgAllSubFolderFileSize.QuadPart/1024/1024;
  131. _tprintf(_T("FILE SIZE : %.4u MB \n"),(uMaxSize));
  132. }
  133. else
  134. {
  135. float fSize;
  136. fSize=(float)lgAllSubFolderFileSize.QuadPart/1024/1024/1024;
  137. _tprintf(_T("FILE SIZE : %.2f GB \n"),(fSize));
  138. }
  139. return 1;
  140. }
  141. }
  142. else
  143. {
  144. return 1;
  145. }
  146. }
  147. }

http://blog.csdn.net/microzone/article/details/49883783

win32命令行小程序获取指定文件夹或者目录下面的所有文件大小,文件数量,目录数量的更多相关文章

  1. 图解微信小程序---获取电影信息

    图解微信小程序---获取电影信息 代码笔记 第一步:编写js文件,调用api获取相对应电影详情信息(注意带入的参数是id不在是榜单的type,电影api的movie后面又斜杠,别忘了,对应的绑定数据的 ...

  2. 使用&period;NET Core快速开发一个较正规的命令行应用程序

    程序员的世界,命令行工具一直是"体验非常友好"的工具,也能自动化完成很多事情,同时还能结合shell来进行某项任务的批处理(脚本).在.NET Core中,命令行应用程序是基础,但 ...

  3. 微信小程序 获取用户openid

    1,可以在小程序app.js入口文件中放入登录代码 wx.login({ success: res => { // 登录注册接口 if (res.code) { // 调用服务端登录接口,发送 ...

  4. 转】未指定 INSTANCESHAREDWOWDIR 命令行值。如果指定INSTANCESHAREDDIR 值,则必须指定该值 &period;

    插入光盘后不要用autorun的安装,使用命令行安装!cd进安装光盘的根目录,输入命令:setup.exe /INSTALLSHAREDDIR="D://Program Files//Mic ...

  5. Android中使用am命令实现在命令行启动程序详解

    在Android中,除了从界面上启动程序之外,还可以从命令行启动程序,使用的是命令行工具am. 复制代码代码如下: usage: am [subcommand] [options] start an ...

  6. 微信小程序-获取经纬度

    微信小程序-获取经纬度 最近公司新功能 要求在外的市场人员 发送位置信息回来. 用的还是微信小程序开发.... 微信小程序 提供一个接口 getLocation 这个接口反回来的位置 相对实际位置 相 ...

  7. 微信小程序获取Access&lowbar;token和页面URL生成小程序码或二维码

    1.微信小程序获取Access_token: access_token具体时效看官方文档. using System; using System.Collections.Generic; using ...

  8. &lbrack;微信小程序&rsqb; 微信小程序获取用户定位信息并加载对应城市信息,wx&period;getLocation,腾讯地图小程序api,微信小程序经纬度逆解析地理信息

    因为需要在小程序加个定位并加载对应城市信息 然而小程序自带api目前只能获取经纬度不能逆解析,虽然自己解析方式,但是同时也要调用地图,难道用户每次进小程序还要强行打开地图选择地址才定位吗?多麻烦也不利 ...

  9. thinkphp3&period;2&period;3 小程序获取手机号 php 解密

    首先是把这个文件夹放到\ThinkPHP\Library\Org里面 //zll 根据加密字符串和session_key和iv获取手机号 /** * [getphone description] * ...

随机推荐

  1. Objective-C异步编程

    1. 不要阻塞主线程 不管在进行iOS还是OS X开发中,主线程都只应该处理用户交互和界面布局,好的程序通常能够随时快速响应用户的操作,所以CPU密集型或者会阻塞线程的代码应该在其他位置去执行,我指的 ...

  2. Z-Stack ZMain学习

    [注:本文源自博客园http://www.cnblogs.com/cherishui/,为尊重劳动者成果,如需转载请保留此行] 在TI已有的Z-Stack的工程下面,打开已有的demo文件,通过分析不 ...

  3. MD5、拼音检索和邮件发送

    MD5算法 MD5算法是一种散列(hash)算法(摘要算法,指纹算法),不是一种加密算法(易错) l  为了防止用户偷懒,算两次MD5值,或者加上一个固定的字符串 MD5算法理论上是不可逆的,因此攻击 ...

  4. &lbrack;MUD&rsqb;MUDLIB详解&sol;MUDOS运行流程&sol;最小MUDLIB&sol;mud文件结构

    现在大部分中文MUD都是在东方故事(esII)基础上发展起来的,其目录结构基本一样, 也有个别MUD为了标新立异对个别目录换了个名字以示不同,但其实质没有什么变化. 这个做的最可恶的是xkx,把一个好 ...

  5. Solr4&period;7从文件创建索引

    索引数据源并不会一定来自于数据库.XML.JSON.CSV这类结构化数据,很多时候也来自于PDF.word.html.word.MP3等这类非结构化数据,从这类非结构化数据创建索引,solr也给我们提 ...

  6. 个人笔记之json实现模糊查询

    1:首先创建一个项目如:(说明:此项目是在eclipse创建的) 2.在创建相对应的包如: 3.创建写好相对应的配置文件如: applicationContext.xml具体内容如下: <?xm ...

  7. (转)spring aop

    工作忙,时间紧,不过事情再多,学习是必须的.记得以前的部门老大说过:“开发人员不可能一天到晚只有工作,肯定是需要自我学习.第一:为了更充实自己,保持进步状态.第二:为了提升技术,提高开发能力.第三:保 ...

  8. Luogu P5292 &lbrack;HNOI2019&rsqb;校园旅行

    非常妙的一道思博题啊,不愧是myy出的题 首先我们考虑一个暴力DP,直接开一个数组\(f_{i,j}\)表示\(i\to j\)的路径能否构成回文串 考虑直接拿一个队列来转移,队列里存的都是\(f_{ ...

  9. Android ORC文字识别之识别身份证号等(附源码)

    项目地址https://github.com/979451341/OrcTest 我们说说实现这个项目已实现的功能,能够截图手机界面的某一块,将这个某一块图片的Bitmap传给tess-two的代码来 ...

  10. Windows添加用户和组命令

    查看当前存在用户: net user 查看当前用户组: net localgroup 添加用户(以添加用户ls密码abcd1234为例): net user ls abcd1234 /add 添加用户 ...