#include #include using namespace std; qint64 du(const QString &path) { QDir dir(path); qint64 size = 0; // foreach (QFileInfo fileInfo, dir.entryInfoList(QDir::Files)) //计算文件大小 size += fileInfo.size(); // dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)返回所有子目录,并进行过滤 foreach (QString subDir, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) //若存在子目录,则递归调用du函数 size += du(path + QDir::separator() + subDir); char unit = 'B'; quint64 curSize = size; if(curSize > 1024) { curSize /= 1024; unit = 'K'; if(curSize > 1024) { curSize /= 1024; unit = 'M'; if(curSize > 1024) { curSize /= 1024; unit = 'G'; } } } cout << curSize << unit << "\t" << qPrintable(path) << endl; return size; } int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); QStringList args = app.arguments(); QString path; if (args.count() > 1) //如果命令行提供了路径,则使用此路径 path = args[1]; else //如果没有提供路径的话,则使用系统当前路径 path = QDir::currentPath(); du(path); return 0; }
|
|