说实话,我是为了混个持之以恒的标签的 = =,谁叫我过年都没怎么写呢!!!!
/**
* 书本:【Qt5开发及实例】
* 功能:得到文件的大小和目录的路径
* 文件:main.cpp
* 时间:2015年2月3日21:18:16
* 作者:cutter_point
*/
#include <QCoreApplication>
#include <QStringList>
#include <QDir>
#include <QtDebug>
//根据给的路径得到文件的大小和目录
qint64 du(const QString &path)
{
QDir dir(path); //这个类可以提供文件的目录和类容
qint64 size = 0;
//得到文件目录下的所有的文件和目录
foreach(QFileInfo fileInfo, dir.entryInfoList(QDir::Files))
{
size += fileInfo.size(); //把所有文件的大小加起来
}
//得到所有子目录下文件的大小
//列出目录列表,不列出特殊的条目,“.”和".."
foreach(QString subDir, dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot))
{
//路径+当前系统下的分割符+目录名
size += du(path + QDir::separator() + subDir); //递归调用,遍历所有目录,深度优先
}
char unit = 'B';
qint64 curSize = size; //这个目录的大小
if(curSize > 1024)
{
//当前的大小比1024个字节还大,上面计数是按字节大小得到的fileInfo.size()
curSize /= 1024; //除
unit = 'K'; //KB
if(curSize > 1024)
{
//还大
curSize /= 1024;
unit = 'M'; //MB
if(curSize > 1024)
{
curSize /= 1024;
unit = 'G'; //GB
} //if
} //if
} //if
qDebug()<<curSize<<unit<<"\t"<<qPrintable(path)<<endl;
return size;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QStringList args = a.arguments();
QString path;
if(args.count() > 1)
{
path = args[1];
}
else
{
path = QDir::currentPath();
}
qDebug()<<path<<endl;
// path = "D:/Qt/5.1.0-rel-static";
// path = "E:/DNF";
// path = "E:/英雄联盟";
// path = "F:/传智播客Hibernate视频教程";
du(path);
return a.exec();
}
原文:http://blog.csdn.net/cutter_point/article/details/43939005