C ++写入文本文件的特定部分而不覆盖

时间:2012-11-14 11:06:53

标签: c++ file

我正在编写一个简单的日历应用程序,它将数据保存在文本文件中。我使用iCalendar格式,因此我的文本文件以“END:VCALENDAR”结束。

当用户添加新事件时,应用程序应在文本文件末尾写入关联数据而不覆盖“END:VCALENDAR”,我该怎么做?删除保存在文本文件中间的事件怎么样?是否需要使用更新的数据再次编写整个文件?非常感谢。

3 个答案:

答案 0 :(得分:2)

您无法通过在文件中间书写来动态“展开”文件。 您需要:

  1. 将整个日历反序列化为内存,然后将其写回(最佳选项)
  2. 读入内存中要插入数据的所有内容,写入数据,然后写入存储文件“tail”

答案 1 :(得分:2)

没有任何方法可以插入文件的中间;底层操作系统不支持它。通常的技术是将文件复制到一个临时文件中,在线上进行所需的任何修改,然后(如果复制的输出上没有错误,则 - 确认在关闭后输出流没有失败)删除输入文件并将临时文件重命名/移动到原始名称。

答案 2 :(得分:1)

C ++库不支持任何方法,与append不同,它提供了在任何特定位置插入文件的选项;无论是文本还是二进制文件。

您有两种选择: 首先是你假设的那个,即读取整个文件,更新数据并再次写回。 其次是在文件中查找最后一行的第一个字符 E ,如END:VCALENDAR,编写事件,然后将“END:VCALENDAR”追加到它。

是的,您可以通过编程方式在最后一个换行符之后找到最后一行的第一个字符 E 。 对不起,据我所知,没有其他任何方法。