得到文件的大小和目录的路径(控制台应用程序)

  1. #include <QCoreApplication>  
  2. #include <QStringList>  
  3. #include <QDir>  
  4. #include <QtDebug>  
  5.   
  6. //根据给的路径得到文件的大小和目录  
  7. qint64 du(const QString &path)  
  8. {  
  9.   QDir dir(path); //这个类可以提供文件的目录和类容  
  10.   
  11.   qint64 size = 0;  
  12.   //得到文件目录下的所有的文件和目录  
  13.   foreach(QFileInfo fileInfo, dir.entryInfoList(QDir::Files))  
  14.     {  
  15.       size += fileInfo.size();    //把所有文件的大小加起来  
  16.     }  
  17.   
  18.   //得到所有子目录下文件的大小  
  19.   //列出目录列表,不列出特殊的条目,“.”和".."  
  20.   foreach(QString subDir, dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot))  
  21.     {  
  22.       //路径+当前系统下的分割符+目录名  
  23.       size += du(path + QDir::separator() + subDir);    //递归调用,遍历所有目录,深度优先  
  24.     }  
  25.   
  26.   char unit = 'B';  
  27.   qint64 curSize = size;    //这个目录的大小  
  28.   
  29.   if(curSize > 1024)  
  30.     {  
  31.       //当前的大小比1024个字节还大,上面计数是按字节大小得到的fileInfo.size()  
  32.       curSize /= 1024;  //除  
  33.       unit = 'K';   //KB  
  34.   
  35.       if(curSize > 1024)  
  36.         {  
  37.           //还大  
  38.           curSize /= 1024;  
  39.           unit = 'M';   //MB  
  40.   
  41.           if(curSize > 1024)  
  42.             {  
  43.               curSize /= 1024;  
  44.               unit = 'G';   //GB  
  45.             } //if  
  46.         }   //if  
  47.     } //if  
  48.   
  49.   qDebug()<<curSize<<unit<<"\t"<<qPrintable(path)<<endl;  
  50.   return size;  
  51.   
  52. }  
  53.   
  54. int main(int argc, char *argv[])  
  55. {  
  56.   QCoreApplication a(argc, argv);  
  57.   
  58.   QStringList args = a.arguments();  
  59.   QString path;  
  60.   
  61.   if(args.count() > 1)  
  62.     {  
  63.       path = args[1];  
  64.     }  
  65.   else  
  66.     {  
  67.       path = QDir::currentPath();  
  68.     }  
  69.   
  70.   qDebug()<<path<<endl;  
  71.   
  72. //  path = "D:/Qt/5.1.0-rel-static";  
  73. //  path = "E:/DNF";  
  74. //  path = "E:/英雄联盟";  
  75. //  path = "F:/传智播客Hibernate视频教程";  
  76.   
  77.   du(path);  
  78.   
  79.   return a.exec();  
  80. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值