从大文件读取错误分配

时间:2014-08-21 08:09:49

标签: c++ qt

因此,任务是在文件中查找文本。我想省略手动编码检测,并使用QFileQTextStream(我的意思是QFile::readAllQTextStream::readAll,并使用readLine编码。不幸的是,即使在300-360mb的文件中,它们也消耗了太多的内存,而bad_alloc深度readAll的应用程序崩溃了。

问题是:是否可以减少此类的内存​​消耗?如果没有,是否有一个好的课程没有那么多的阅读记忆?

if (fInfo.isExecutable() || !fInfo.isReadable())
    continue;

QFile file(fInfo.absoluteFilePath());

if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    continue;

QTextStream in(&file);
int lineNumber = 1;
QStringList data;

if (file.size() > sizeTreshold()) 
{
    QString d;
    while(!in.atEnd()) 
    {
        d = in.readLine(); // <--- even this method leads to crash
        data.append((!m_case) ? d.toLower() : d);
    }
}
else 
{
    QString d = in.readAll();
    if (!m_case)
        data = d.toLower().split(QLatin1String("\n"));
    else
        data = d.split(QLatin1String("\n"));
}

file.close();

0 个答案:

没有答案