2012-01-08 20 views
0

ファイルの先頭にあるバイト数を編集する、または "X倍のsizeof(int)領域"にジャンプする書き込み操作を実行するなど、バイナリファイルに対する操作を実行する必要があります。実際のコードスニペットに興味を持っているわけではありません。これはfseekの仕事ですか?私は私の記憶の中のファイルからのデータを読み込まないことが重要です。バイナリファイルのCでの操作

答えて

2

はい、これはfseek()の仕事です。

ファイルの途中に書き込むと、既存のデータが上書きされます。追加する予定の金額だけ後続のすべてのデータを移動する必要があります。

+0

そして、特定のオフセットを途中で指定すると、単に上書きされますか? – andrei

+0

@andrei yes - ファイルの内容を変更したい場合は、必要なものを書き込んで新しいファイルを作成し、最後に(アトミックに)名前を変更する方がよいでしょう。これは一般的なプロセスですが、落とし穴がたくさんあります:適切な解決策を見つけるためにこれについてgoogleしてください。 – fge

1

fseek()を使用できますが、mmap()もご覧ください。後者の利点は、ファイル内の現在のポインタを気にする必要がなく、オフセットを使用してナビゲートできる単なるメモリ領域です。

問題ありません:いいえmmap() for Windows。 のデータを挿入する場合は、のデータを使用することをお勧めします。

+0

私が選ぶべきパフォーマンスに興味がありますか? – andrei

+0

これはLinuxアプリケーションで問題なく使えます。 – andrei

+0

'mmap()'は、読み書きのためにsyscallを発行しないという利点があります。しかし、データを挿入したいのであれば、@AdamZalcmanが正しく言及しているように、それは実際には適していません。 – fge