ファイル内の特定のデータを置き換えるプログラムを実行しようとしています。置換しようとしているファイルの関連部分は次のようになります。
1 Information 15e+10
2 Information 2e+16
3 Information 6e+2
等々。
問題のファイルは、数ギガバイトの範囲で非常に大きくなる可能性があり、私の理解では、ファイル全体のバッファーを使用してファイル全体を書き換えることは不可能/不合理です。値を置き換えたいだけです (例: 15e+10
)。
これはすべてシンプルios::in|ios::out
で正常に機能しtellp()
、値を同様のサイズの値に置き換えている場合 ( 15e+10
-> 12e+12
)、または行の下で無視できる余分なスペースを追加するだけでサイズが小さい場合 (例15e+10
-> 4e+10
) . しかし、値をファイル内の値よりも長い値に置き換える必要がある場合 (例6e+2
-> 16e+10
)、改行文字を上書きするか、次の行の情報を上書きし始めると、問題が発生します。 .
フォーラムで検索したところ、ファイルを上書きするか、ファイルの最後に追加するか、ファイル全体をバッファリングして再作成することができると誰もが言っています。ファイルを再作成しなくても、値を正しく上書きするという目標を達成できる方法はありますか?
そうでない場合、問題の複数のファイルがメモリに対して大きすぎる場合、これを行うために2つのファイルを開く(1入力1出力)にはどうすればよいですか?
注:boostライブラリboost::
のないシステムでこれを実行できるようにする必要があるため、使用も避けたいと思います.