c++ - 我可以将字符串附加到文件的特定行吗?

标签 c++ qt

我对 stackoverflow 还是很陌生,所以如果我做错了什么,我深表歉意。我有一个不断更新的 csv 文件,但我希望能够选择将字符串添加到特定行的末尾。我有一种方法能够找到我想要将字符串附加到的行,但我不确定如何将该字符串添加到该行的末尾而不在 csv 文件的底部创建新行。

'''

QFile listOfStudents("listOfStudents.csv");

QTextStream read(&listOfStudents), write(&listOfStudents;

QStringList studentInformation;

QString junkLine = read.readLine(), line, studentLine,
        appendingString = "Ralph Emerson";

if(!listOfStudents.open(QFile::ReadWrite | QFile::Text))
{
    QMessageBox::warning(this, "title", "not open!");
}

while(!read.atEnd())
{
    line = read.readLine();
    if(line.contains(IDNumber, Qt::CaseSensitive))
    {
        studentLine = line;
        studentLine += ", ";
        studentLine += appendingString;
        line.clear();
        write << studentLine;

        break;
    }
}

'''

如果 studentLine 是

12345678,加里·鲍勃,肯尼迪·约翰逊

我想附加字符串“Ralph Emerson”, 预期的结果是

12345678,加里·鲍勃,肯尼迪·约翰逊,拉尔夫·爱默生”

但是,上面的代码只会将更新后的 studentLine 附加到文件的底部,而不是更改它最初在文件中所在的行。

最佳答案

文件通常是连续的、有界的字节流。因此,如果你想写在一个中间,你就必须把剩下的全部向前移动,为新的腾出空间。

如果您的文件足够小,一个简单的解决方案是完全解析它们,将它们作为数据结构保存在内存中,修改它,然后将其转储回来。

然而,最高效的解决方案是在读取文件时写入一个新文件,然后在到达插入点时添加新文件,然后继续将文件的其余部分复制到输出中。

关于c++ - 我可以将字符串附加到文件的特定行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55695377/

相关文章:

c++ - 在单独的线程中正确使用 Boost::asio

c++ - 是否应该在头文件中使用 C++ namespace 别名?

c++ - 在不平滑的情况下将图像大小增加 2 的幂

qt - 如何声明多个 QML 属性而不单独处理每个属性?

c++ - 快速图像处理

qt - 我如何知道窗口是否被模式阻塞

c++ - 如何在 CMake 中使用 OpenGL/Angle 编译 QtGui 示例?

c++ - 存储对象的底层类型是否不好?

c++ - 使用枚举来专门化模板

c++ - 使用 C++ 在控制语句中放置空格的编码风格建议/基本原理