gpt4 book ai didi

c++ - 无法在 QT C++ 中获取目录大小

转载 作者:行者123 更新时间:2023-11-27 22:42:15 25 4
gpt4 key购买 nike

cur_file.size 返回0,我该如何解决这个问题?

void MainWindow::setDirectory() {
QString directory_way = QFileDialog::getExistingDirectory(0, "Choose directory: ", "");
QFile cur_file(directory_way);
QFile fileOut("fileout.txt");
if(fileOut.open(QIODevice::WriteOnly | QIODevice::Text))
{
QTextStream writeStream(&fileOut);
writeStream << "You chose directory: " << directory_way <<" with size " << cur_file.size();
fileOut.close();
}}

最佳答案

QFile::size() 只能用于文件,不能计算目录的大小。 Qt 不提供开箱即用的功能来完成后者,但是编写自己的递归函数并不难,该函数遍历目录的文件和目录,并添加它们的大小...

这是一个完整的例子:

#include <QtWidgets>

qint64 dirSize(QString dirPath) {
qint64 size = 0;
QDir dir(dirPath);
//calculate total size of current directories' files
QDir::Filters fileFilters = QDir::Files|QDir::System|QDir::Hidden;
for(QString filePath : dir.entryList(fileFilters)) {
QFileInfo fi(dir, filePath);
size+= fi.size();
}
//add size of child directories recursively
QDir::Filters dirFilters = QDir::Dirs|QDir::NoDotAndDotDot|QDir::System|QDir::Hidden;
for(QString childDirPath : dir.entryList(dirFilters))
size+= dirSize(dirPath + QDir::separator() + childDirPath);
return size;
}

QString formatSize(qint64 size) {
QStringList units = {"Bytes", "KB", "MB", "GB", "TB", "PB"};
int i;
double outputSize = size;
for(i=0; i<units.size()-1; i++) {
if(outputSize<1024) break;
outputSize= outputSize/1024;
}
return QString("%0 %1").arg(outputSize, 0, 'f', 2).arg(units[i]);
}

int main(int argc, char* argv[]) {
QApplication a(argc, argv);

QString directoryPath = QFileDialog
::getExistingDirectory(nullptr, "Choose directory: ", "");
//calculate and output selected directory size
qint64 size = dirSize(directoryPath);
qInfo() << formatSize(size);

QTimer::singleShot(0, &a, &QApplication::quit);
return a.exec();
}

关于c++ - 无法在 QT C++ 中获取目录大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47854288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com