質問: ::SetFilePointerEx()、::ReadFile()、::WriteFile()のような、ポインタ位置(オフセット)指定(バイト数)、読み書きサイズ指定(バイト数)などをしてファイル操作をするような動作をメモリ内で行えないかと考えております。 適したライブラリなどはございませんでしょうか。 以下のような動きを現在実装しております。 1基本データのバイナリファイルを読む。 2仮置きファイルを作り、基本データを書き込む。 3変更箇所ファイルのデータを読み込む(複数あるので、複数ループ) データ内容 1:基本データのポインタ位置 2:変更データのサイズ 3:変更データ 4変更箇所データの1、2を基に、3のデータを仮置きファイルのデータを上書き。 5仮置きファイルデータを読み込んで、最終出力ファイルに出力。 最終出力ファイルは、基本データ以外も出力するものがあるため、仮置きファイルを別途作っています。 ただ、ファイル出力をすることで、処理も遅く、性能が悪いです。 そのため、内部で同様のことを行えないかと考えている次第です。
回答: ライブラリは知りませんが、全データをvectorに読み込んで適宜編集、でなにか支障があるのでしょうか。 (あるいは、いわゆる「バイナリエディタ」のサンプルプログラムがあると参考になるかも知れません。私は見つけていませんが) あと、直接は関係ありませんが、変更はファイルの後ろから順に適用していかないと、「ポインタ」の位置がずれることがありますね。あと、変更が重なっていたりしないかの検査も要りそうな気がします。事故時の回復を考えると、操作はオンメモリでやるにしても変更を開始するまえのデータはバックアップファイルとして取っておくのがいいような気がします。