我正在编写一个简单的日历应用程序,它将数据保存在文本文件中。我使用 iCalendar 格式,所以我的文本文件以“END:VCALENDAR”结尾。
当用户添加新事件时,应用程序应该在文本文件末尾写入关联数据而不覆盖“END:VCALENDAR”,我该怎么做?删除保存在文本文件中间的事件怎么样?是否需要使用更新的数据再次写入整个文件?非常感谢。
没有任何方法可以插入文件中间;底层操作系统不支持它。通常的技术是将文件复制到一个临时文件中,沿着这条线进行任何您需要的修改,然后(并且只有在副本的输出上没有错误的情况下 - 验证输出流在关闭)删除输入文件并将临时文件重命名/移动为原始名称。
您不能通过在文件中间写入来动态“扩展”文件。您需要:
C++ 库不支持任何方法,与 append 不同,它提供了在文件的任何特定位置插入的选项;无论是文本文件还是二进制文件。
那么您有两种选择:第一种是您假设的选择,即读取整个文件,更新数据并再次写回。其次是在文件中查找最后一行的第一个字符E,如 END:VCALENDAR,写入您的事件,然后将“END:VCALENDAR”附加到它。
是的,您可以通过编程找到最后一行的第一个字符E就在最后一个换行符之后。抱歉,据我所知,没有其他办法。