【问题标题】:How to write on a specific line in a file?如何在文件的特定行上写入?
【发布时间】:2013-05-07 15:59:08
【问题描述】:

我想在一个已经存在的文件上写一些数据。它是一个包含大约 8-10 行标题(# cmets)和数千行 data values 的文件。我想要的是保持标题相同,但将更新的data values 添加到文件中。很有可能更新后data values的行数减少了。

所以基本上我想擦除标题中最后一个 # 注释之后的所有内容,然后从那里开始写入新值。这可能吗?

这是一个例子:

原始文件

#Program
#Date
#Hello
0 23 23 54
1 12 4 2
2 253 786 9887
3 3 23 54
4 1 4 4
5 23 6 81

更新文件

#Program
#Date
#Hello
0 2 23 54
2 253 786 9887
5 23 6 81

我正在编辑的代码使用fopen 读取文件并使用fprintf 写入文件。如果答案是这样的话,我会更喜欢这样,这样我就不必改变这两个。

【问题讨论】:

  • 你为什么使用fopen?在 C++ 中,您应该使用 std::fstream
  • 我正在开发的软件使用 fopen。
  • 嗯...如果使用getline 会更容易;)
  • 我知道。我试过了,但软件太大了,我无法改变它。如果我使用 fopen 以外的其他东西,很多其他东西都不起作用。

标签: c++ file file-io


【解决方案1】:

我想出的最简单的方法是打开Original File,读取标题并将其复制到内存中,例如string header。然后通过写入header覆盖整个文件,然后是新数据

【讨论】:

  • 您是否建议覆盖现有文件?因为这并不是最好的主意,至少如果您担心在编写过程中出现问题时会损坏数据。
  • @jrok 我没有建议那样,OP 确实如此。正如 OP 在问题中的第一句话:“我想在一个已经存在的文件上写一些数据。”
  • @jrok 如果我没有完全重写/覆盖,那么还有什么替代方案?
  • @detraveller 写一个新文件,删除旧文件,将新文件重命名为旧文件。
【解决方案2】:

编写一个函数,从文件中读取标题并将它们存储到类/变量/结构中。

编写一个将标题写入文件的函数

编写一个将所需值写入文件的函数

按此顺序执行所有三个函数。它与您覆盖的文件相同这一事实无关紧要,请务必在写回之前关闭它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    相关资源
    最近更新 更多