c++ - Qt - 在文件开头重复写入

标签 c++ qt

如何在 QTextstream 的开头写一个新行?

我正在向后追踪二叉树并将结果写入日志文件。我希望根节点成为列表中的第一行。简单地附加行会导致相反的顺序。我需要做的是在文件顶部添加新行。

这是我得到的一个简化示例:

QFile mFile("fileName.csv");
QTextStream out(&mFile);
if (!mFile.open(QFile::WriteOnly | QFile::Text)){
        qDebug() << " Could not open foundPath file";
        return;
}

int cursor = 10;
while (cursor > 0){
    out << cursor << "\n";
    cursor--;
}

结果明明是10, 9, ... , 1,但我要的是1, 2, ..., 10。

最佳答案

你不能覆盖“第一行”,因为文件不是按行存储的,而是一个字节接一个字节地存储;换行符没有什么特别之处。因此,如果您用更长的行替换文件的第一行,您将覆盖第二行的部分内容,例如。

可以读取整个文件,并在重写其余部分之前添加第一行,但是一旦您的日志文件变大,这将非常缓慢并且资源密集。

正确的方法显然是反转显示,而不是日志。

关于c++ - Qt - 在文件开头重复写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30704350/

相关文章:

c++ - 当 main 在另一个文件中时出现编译错误(g++、bison、flex)

android - 底层 PinchArea 从 MultiPointTouchArea 窃取事件

c++ - 对 FILE 的操作改为对 QByteArray 的操作?

c++ - 使用 QStyledItemDelegate 将鼠标悬停在文本上时如何更改鼠标指针?

c++ - 使用 UML 表示在 C++ 模板类中定义的 typedef

c++ - 什么时候销毁对象?

c++ - 从使用 sstream 读取的单词中删除最后一个空格的最佳方法?

c++ - 如果我不使用 vs110_xp 编译 DLL 会怎样?

python - 如何在带有繁忙指示器的 QProgressBar 上显示文本?

c++ - 在 Qt 中解析元数据时检测方法的来源