我想要查看QFile读取的QTextStream的下一个字符,以便创建高效的分词器。
然而,我没有找到任何令人满意的解决方案。
QFile f("test.txt");
f.open(QIODevice::WriteOnly);
f.write("Hello world\nHello universe\n");
f.close();
f.open(QIODevice::ReadOnly);
QTextStream s(&f);
int i = 0;
while (!s.atEnd()) {
++i;
qDebug() << "Peek" << i << s.device()->peek(3);
QString v;
s >> v;
qDebug() << "Word" << i << v;
}
给出以下输出:
Peek 1 "Hel" # it works only the first time
Word 1 "Hello"
Peek 2 ""
Word 2 "world"
Peek 3 ""
Word 3 "Hello"
Peek 4 ""
Word 4 "universe"
Peek 5 ""
Word 5 ""
我尝试了几种实现方式,包括使用QTextStream::pos()和QTextStream::seek()。这样做效果更好,但是pos()有缺陷(当文件太大时返回-1)。
有没有人有解决这个经常性问题的办法?提前感谢您。
s.device()->pos()
和s.device()->bytesAvailable()
添加到日志中以检查设备读取的进度。这可能有助于定位问题。 - Marek RQTextStream
。 - Marek R