无法在QT C 中获得目录大小
Can not get directory size in QT C++
本文关键字:QT 更新时间:2023-10-16
cur_file.size return 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();
}
QIODevice::size()
的QT文档:
如果设备关闭,返回的尺寸将无法反映设备的实际尺寸。
相关文章:
- 没有找到相关文章