当我使用递归查看每个文件时,如何获取文件的大小?
我收到下一个错误:


int dir_size(const QString _wantedDirPath)
{
    long int sizex = 0;
    QFileInfo str_info(_wantedDirPath);
    if (str_info.isDir())
    {
        QDir dir(_wantedDirPath);
        QStringList ext_list;
        dir.setFilter(QDir::Files | QDir::Dirs |  QDir::Hidden | QDir::NoSymLinks);
        QFileInfoList list = dir.entryInfoList();

        for(int i = 0; i < list.size(); ++i)
        {
            QFileInfo fileInfo = list.at(i);
            if ((fileInfo.fileName() != ".") && (fileInfo.fileName() != ".."))
            {
                sizex += (fileInfo.isDir()) ? this->dir_size(fileInfo.path()) : fileInfo.size():
                QApplication::processEvents();
            }
        }
    }

    return sizex;
}

最佳答案

它崩溃是因为您一次又一次地递归评估同一个文件夹。sizex += this->dir_size(fileInfo.path()); 语句以相同的文件夹名称递归调用相同的函数。
因此,您的堆栈不断增长并最终耗尽内存。
fileInfo.path() 给出相同的(父)文件夹。
fileInfo.filePath() 给出带有路径的文件名

将其更改为 sizex += this->dir_size(fileInfo.filePath()); 并修复它

关于c++ - 如何在目录遍历中获取文件大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7096637/

10-11 19:31