gpt4 book ai didi

c++ - QTextStream 弄乱了它的位置指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:18:15 31 4
gpt4 key购买 nike

我正在为文本文件编写解析器,但 QTextStream 似乎缺少某些内容。我使用的是 Qt 5.4.1,代码是单线程的,如果这很重要的话。

这是方法:

const Event* AviLogFile::nextEvent() {                                          
qDebug() << "Entering nextEvent()";
qDebug() << "m_file.pos() before QTextStream: " << m_file.pos();
QTextStream in(&m_file);
qDebug() << "m_file.pos() after QTextStream: " << m_file.pos();
qDebug() << "in.pos(): " << in.pos();
Event* ev = 0;

while (!in.atEnd() && ev == 0) {
QString line = in.readLine();
qDebug() << "(inside loop) m_file.pos(): " << m_file.pos();
qDebug() << "(inside loop) in.pos(): " << in.pos();
ev = parseEvent(line);
}

m_currentEvent = ev;
if (!ev) {
qDebug() << "in.AtEnd: " << in.atEnd() << ". file.atEnd: " << m_file.atEnd();
}
return ev;
}

我在循环中调用它。第一次调用工作正常,但在第二次调用时,我得到以下输出:

Entering nextEvent()
m_file.pos() before QTextStream: 2244
m_file.pos() after QTextStream: 2244
in.pos(): 2244
(inside loop) m_file.pos(): 18628
(inside loop) in.pos(): 65

如您所见,QTextStream 和 QFile 内部指针在进入循环之前是正常的,但在循环内部完全困惑了。

知道这里发生了什么吗?

最佳答案

several standing bugs关于使用 QTextStream::pos() 在下面有一个 IO 设备。其中许多是“未解决”或“不会修复”,他们的复制器案例看起来与您的问题完全一样。

我建议避免依赖该函数(另外,引用 QTextStream 的文档:

Because QTextStream is buffered, this function may have to seek the device to reconstruct a valid device position.

它也会使你的循环过程变慢)。

还可以找到更多相关信息 here

关于c++ - QTextStream 弄乱了它的位置指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30327496/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com