当我使用递归查看每个文件时,如何获取文件的大小?
我收到下一个错误:
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/