同じファイルを2度開く


アーカイブファイルを扱う場合、同じファイルを複数箇所で扱う場面が多々出てきます。
そういう場合に、色々な方法が考えられるけれども、どの方法が最もいいのか悩むところ。

複数回CreateFileする


ファイルパスの管理も行う必要があるけれども、最も単純な手段。
深く考えないならこれで十二分。

ファイルマッピングオブジェクトを使う


ファイルマッピングオブジェクトとかの管理も必要になるけれども、それなりに簡単な手段。
普通のメモリのようにファイルアクセスができるので、色々と実装が楽になるメリットもある。
ただ、大きいファイル(4G超えるファイルとか)を全部マップしようとするとエラーで落ちるので(64bit版Windowsなら問題ないかもしれないけど)、大き過ぎるファイルは扱えないという制限が付くかもしれない。
まぁ、そんな制限にかかるようなものはそうないハズなので、どうでもいいのですけどね。

排他処理する


ファイルからの読み込み前に、クリティカルセクションとかで排他処理して、ファイルポインタの移動して、読み込んで、とかする。
この方法を使うメリットが特に思い付かない、面倒なだけの方法です。

全部メモリに展開してしまえ


それぐらいだったらファイルマッピングオブジェクトを使いましょう。

その他


DuplicateHandleとか使えるのかなと試してみたけれど、ファイルポインタが同一のものになってしまうんですね。
同一オブジェクトを指すハンドルの複製だから仕方がないです、ファイルポインタが違ったら違うオブジェクトですからね。

それで結局どう実装するの


ファイルマッピングすることにしました。
他の実装が楽になりますからね。