qt - 查看 QTextStream

标签 qt seek peek qtextstream

我想查看读取 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)。

有没有人有解决这个反复出现的问题的方法?先感谢您。

最佳答案

你从QIODevice偷看,但随后您从 QTextStream 中读到,这就是为什么 peek 只工作一次。尝试这个:

while (!s.atEnd()) {
      ++i;
      qDebug() << "Peek" << i << s.device()->peek(3);
      QByteArray v = s.device()->readLine ();
      qDebug() << "Word" << i << v;
}

不幸的是,QIODevice不支持单字阅读,需要自己动手,结合peak和read。

关于qt - 查看 QTextStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21401954/

相关文章:

Groovy 'Peeking' 前面带有迭代器?

c++ - 以编程方式编辑 QPlainTextEdit 的内容

node.js - fs.createReadStream() 在文件的特定位置

ffmpeg - 是否保证整个流的数据包持续时间是统一的?

android - 在 android 媒体播放器中重新加载数据源

java - peek() 或不 peek()

c++ - 与 MinGW (v.4.3.0) 和 libhid 的链接问题

qt - 如何在 PySide/PyQt 中撤消 QStandardItem 的编辑?

c++ - 取消选择 QTableView 中的单行

c# - StreamReader.Readline() 真的是计算文件行数最快的方法吗?