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