我在寫一個簡單的日曆應用程序,它將數據保存在文本文件中。我使用iCalendar格式,所以我的文本文件結束「END:VCALENDAR」。C++寫入文本文件的特定部分而不覆蓋
當用戶添加一個新事件時,應用程序應該在文本文件末尾寫入關聯數據而不覆蓋「END:VCALENDAR」,我該怎麼做?如何刪除保存在文本文件中間的事件?是否需要使用更新的數據再次寫入整個文件?非常感謝。
我在寫一個簡單的日曆應用程序,它將數據保存在文本文件中。我使用iCalendar格式,所以我的文本文件結束「END:VCALENDAR」。C++寫入文本文件的特定部分而不覆蓋
當用戶添加一個新事件時,應用程序應該在文本文件末尾寫入關聯數據而不覆蓋「END:VCALENDAR」,我該怎麼做?如何刪除保存在文本文件中間的事件?是否需要使用更新的數據再次寫入整個文件?非常感謝。
您不能通過在文件中間寫入來動態「擴展」該文件。 你需要,可以:
C++庫不支持任何方法,與append不同,它提供了一個選項,用於在任何特定位置插入文件;無論是文本還是二進制文件。
你有兩種選擇: 首先是你假設的一個,即讀取整個文件,更新數據並重新寫回。 其次是在文件中尋找最後一行的第一個字符E和END:VCALENDAR一樣,寫下你的事件,然後在其中附加「END:VCALENDAR」。
是的,您可以通過編程的方式找到最後一行的第一個字符,E緊接着最後一個換行符。 對不起,就我所知,沒有其他方法。
沒有任何方法插入文件的中間;底層操作系統不支持它。通常的技術是將文件複製到一個臨時文件中,然後(如果在複製—的輸出上沒有錯誤,則只需)做出所需的任何修改,確認輸出流沒有失敗關閉後)刪除輸入文件並將臨時文件重命名/移動到原始名稱。
如何檢查輸出流在關閉後是否失敗?通過逐字節地查看文件,或者使用一些C++函數? – rize
僅僅通過測試它,就像你通常會這樣:'if(output)/ * OK */else/* failed * /',或者if(!output)// failed'。 –