在用户输入值而不覆盖以前的值后,如何写入 .csv 文件的下一行?

Posted

技术标签:

【中文标题】在用户输入值而不覆盖以前的值后,如何写入 .csv 文件的下一行?【英文标题】:How do I write to the next row of a .csv file after the user has inputted values without the previous values being overwritten? 【发布时间】:2019-04-08 20:57:33 【问题描述】:

这是我在 *** 上的第一篇文章,如果我做错了什么,我深表歉意。

我正在创建这个程序,学生可以在其中刷卡并提示他们输入自己的姓名。完成后,程序会将所有内容写入 csv 文件。我的问题是条目被输入的最后一个条目覆盖。有没有办法让程序将所有条目写入 csv 文件而不被最后一个条目覆盖?

这是我用来将条目写入 csv 文件的函数。

void firstTimeDialog::on_buttonBox_clicked(QAbstractButton *button)

    QFile studentLogIn("studentLogin.csv");
    QTextStream write(&studentLogIn);

    if(!studentLogIn.open(QFile::WriteOnly | QFile::Text))
    
        QMessageBox::warning(this, "title", "studentLogIn.csv isn't open");
    

    write << getIDNumber() << ", " << getName() << endl;

getIDNumber() 和 getName() 函数只返回学生的身份证号和学生的姓名。

如果我要打开 csv 文件,我希望它会显示: (用逗号表示csv文件的下一个单元格)

12345678,约翰·多伊

87654321,弗兰克·多伊

01234556,鲍勃·多伊

相反,它向我显示了最后一个条目,即

01234556,鲍勃·多伊

【问题讨论】:

嗨!您已将标志设置为覆盖,这就是它发生的原因 =) 尝试studentLogIn.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text),这应该会有所帮助。 Assistant 明确表示:“请注意,对于文件系统子类(例如 QFile),此模式意味着 Truncate,除非与 ReadOnly、Append 或 NewOnly 结合使用。” 【参考方案1】:

您必须使用标志QIODevice::Append 以便将其写入文件末尾:

if(!studentLogIn.open(QFile::WriteOnly | QFile::Text | QFile::Append))

【讨论】:

以上是关于在用户输入值而不覆盖以前的值后,如何写入 .csv 文件的下一行?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NSUserDefaults 注册用户默认值而不覆盖现有值?

PHP 中如何在同一个文件中写入而不覆盖以前写的内容

Python 3:检查迭代器的下一个值而不进行迭代

提交文本框的值而不重新加载页面

在 XSLT 代码中从 csv 读取空值而不移动单元格值

从 MYSQL 表中更新值而不重新加载页面?