如题,代码如下
使用映射的文件指针遍历文件内容,这个循环所消耗的时候非常长,32M的文件循环8388608次要将近30秒,请大家给点意见
QFile file(filename);
if(!file.open(QIODevice::ReadOnly))
{
QMessageBox::information(NULL,tr("Error"),tr("Open failed"));
return;
}
int sum = 0;
uchar* ptr = file.map(0,file.size());
for(int i = 0;i<file.size();i+=4)
{
sum += ptr[i];
}
result +=sum;
file.unmap(ptr);
file.close();
建议用流式遍历文件,且按照一行一行的遍历,代码如下:
QFile file(filename);
if(!file.open(QIODevice::ReadOnly))
{
QMessageBox::information(NULL,tr("Error"),tr("Open failed"));
return ;
}
QString line;
QTextStream in(&file); // 用文件来构造流
line = in.readLine(); // 读取一行放到字符串里
qDebug() << line;
while(!line.isNull()) // 字符串中有内容
{
line = in.readLine(); // 循环读取下一行
qDebug() << line;
}
file.close(); // 文件读取完毕后,关闭文件
这样就可以不用一个一个的去读取了,流的方式读取是最快的。