0

データをテキストファイルに保存するシンプルなカレンダーアプリケーションを書いています。iCalendar形式を使用しているので、テキストファイルは「END:VCALENDAR」で終わります。

ユーザーが新しいイベントを追加すると、アプリケーションは「END:VCALENDAR」を上書きせずにテキストファイルの最後に関連データを書き込む必要があります。これを行うにはどうすればよいですか?テキストファイルの途中に保存されているイベントを削除するのはどうですか?更新されたデータを使用してファイル全体を再度書き込む必要がありますか?どうもありがとう。

4

3 に答える 3

2

ファイルの途中に書き込むことによってファイルを動的に「拡張」することはできません。次のいずれかを行う必要があります。

  1. カレンダー全体をメモリに逆シリアル化し、それを書き戻します(最良のオプション)
  2. データを挿入したいポイントを過ぎたところにあるすべてのものをメモリに読み込み、データを書き込んでから、保存されたファイル「テール」を書き込みます
于 2012-11-14T11:09:30.970 に答える
2

ファイルの途中に挿入する方法はありません。基盤となるOSはそれをサポートしていません。通常の手法は、ファイルを一時ファイルにコピーし、必要な変更を加えてから(コピーの出力にエラーがない場合のみ、出力ストリームが失敗していないことを確認します。 close)入力ファイルを削除し、一時ファイルの名前を元の名前に変更/移動します。

于 2012-11-14T11:27:06.007 に答える
1

追加とは異なり、ファイルの特定の位置に挿入するオプションを提供するC++ライブラリでサポートされているメソッドはありません。テキストでもバイナリファイルでもかまいません。

その場合、2つのオプションがあります。1つは、推定するオプションです。つまり、ファイル全体を読み取り、データを更新して、再度書き込みます。2つ目は、END:VCALENDARのように、ファイル内で最後の行の最初の文字Eを検索し、イベントを書き込んでから、それに「END:VCALENDAR」を追加することです。

はい、プログラムで、最後の行の最初の文字、最後の改行文字の直後のEを見つけることができます。申し訳ありませんが、私が知る限り、他に方法はありません。

于 2012-11-14T11:23:29.277 に答える