2012-04-24 2 views
2

私が知っている簡単な方法は、新しいファイルを作成し、3バイトを書き込んだ後、元のファイルを(ループ内の)メモリに読み込んで新しいファイルに書き出すことです。Cでバイナリファイルの先頭に3バイトを前置する短い方法はありますか?

新しいファイルの作成をスキップするか、元のファイルを読み飛ばしてもう一度書き戻すことができる方法はありますか?

+0

私はあなたに非常に良い理由があると確信していますが、なぜ尋ねることができますか?おそらく、あなたがターゲットとしているファイルシステムに応じて、リソースフォークや代替ストリームなどの考慮すべき代替ソリューションがありますか? –

+1

私の会社の内部システムの制限を回避するためにこのハックを書いていたので、これは好奇心の疑問です。私はそれがより少ないコードで実行できるかどうか疑問に思いました。 – merlin2011

+1

シンプルなソリューションは、最も信頼性が高いという追加の利点があります。 – Neil

答えて

1

残念ながら、既存のファイル内のバイトの範囲を挿入または削除する方法はありません(POSIXまたは標準のlibcファイルAPIを使用)。

0

ファイルを読み取り/書き込み、最初の4KBを読み込み、後方に4KB、3バイトを書き込み、(4KB-3)バイトを書き込んで、ファイルの最後に到達するまでプロセスを繰り返すことができます。

+1

これをやっているプロセスが終了する前に幸運回復したら:-( –

1

これは、Cについてはファイルシステムほどあまりありません。データをプリペアするためのショートカットを提供する一般的なファイルシステムAPIはあまりないので、一般的に単純な方法が唯一のものです。

あなたのプラットフォームに適した何らかの形式のメモリマップI/Oを使用することができますが、これは別のセットの問題を解決します(たとえば、ファイル全体をアドレス空間にマップできますか?あなたはそれを塊に分割することを余儀なくされましたか?)。

関連する問題