0

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

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

4

3 回答 3

2

没有任何方法可以插入文件中间;底层操作系统不支持它。通常的技术是将文件复制到一个临时文件中,沿着这条线进行任何您需要的修改,然后(并且只有在副本的输出上没有错误的情况下 - 验证输出流关闭)删除输入文件并将临时文件重命名/移动为原始名称。

于 2012-11-14T11:27:06.007 回答
2

您不能通过在文件中间写入来动态“扩展”文件。您需要:

  1. 将整个日历反序列化到内存,然后将其写回(最佳选择)
  2. 将超出您要插入数据的点的所有内容读入内存,写入数据,然后写入存储的文件“tail”
于 2012-11-14T11:09:30.970 回答
1

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

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

是的,您可以通过编程找到最后一行的第一个字符E就在最后一个换行符之后。抱歉,据我所知,没有其他办法。

于 2012-11-14T11:23:29.277 回答