WinRARが作成する書庫の同一性について
同じものを同じように圧縮して同じものができないというのはナンセンスである。
WinRARでベースフォルダを除外(-ep1)して単一フォルダを圧縮するとき、
作成される書庫のバイナリはベースフォルダ名に依存しない。
つまり、どんな名前のフォルダでも、その中身がまったく同じ、
すなわち中の個々のファイルの内容とパスと更新日時と属性が一致すれば、
同じWinRARの同じオプションで圧縮すると完全に同一の書庫ができる。
これは、誰がどんな書庫名を付けようと、解凍したものを同条件で再圧縮すれば、
誰でもいつでもまったく同じ書庫が得られることを意味する。
実は他のアーカイバにはこのような同一性を実現できるものが少ない。
WinRARでは圧縮をサポートしているRARとZIPの両方の形式において可能である。
これはこれから述べるWinRARの圧縮が有するいくつかの性質に立脚している。
まず、WinRARがベースフォルダを除外するスイッチをもっている点である。
これを使用することにより、書庫にベースパスという変動情報が入ることを防ぐ。
再圧縮を考えると、一度解凍されたときに発生する次なるベース名は脆弱である。
ベースを含む書庫は、特定名のフォルダに解凍させようという意図のものを除き、
たいていの場合、書庫名とベース名が2重になっているだけの怠惰な書庫である。
そのようなスイッチを使わずとも、ベース直下ファイルを全選択して圧縮すれば、
ベースを含まない書庫はできるが、その場合ファイルの格納順が問題になる。
すなわち、手動で選択した直下の階層とその下の自動的に選択された階層とで、
ソート順の性質が異なってしまう可能性があり、書庫の同一性にはネックとなる。
例えば、WinRARのGUI設定オプションにはこのスイッチに該当するものがないが、
ファイルリストで特定のフォルダの中身を全選択して圧縮するとこれが起こる。
具体的には、第1階層はエクスプローラでの名前順だが、第2階層以下は、
DOSのDIRコマンドの結果(ファイルシステム依存)に相当するソート順になる。
同一性以前に、1つの書庫内で階層によってソート法が異なるのは不格好である。
ベースフォルダを1つ指定するだけですむ、このスイッチは非常に有効であろう。
次に、WinRARのタイムスタンプの扱いが必要十分である点である。
タイムスタンプ情報を過度にもたないことで、いつでも同一の書庫を再現できる。
フォルダのタイムスタンプを格納しないオプションが存在することに加えて、
ファイルの作成日時とアクセス日時は常に書庫に記録しない。
再圧縮を考えると、フォルダのタイムスタンプは解凍された日時よって決定し、
ファイルの作成日時は解凍、アクセス日時は圧縮された日時によって決定する。
ころらの余分な情報を書庫に含めようとすると同一性はたちまち破綻してしまう。
同じものの圧縮で、現在と1秒後でバイナリが異なることに意味は見いだせない。
さらにもうひとつの特徴として、WinRARの書庫が偶数秒のみを扱う点がある。
ファイルシステムによるユーザの環境を吸収する妥協点としてはほぼ適当である。
以上のようなWinRARの書庫の同一性は、中身が同じで書庫が異なるのを防ぐ。
このことは近年普及を見せるファイル交換ソフトのユーザにとっては福音である。
圧縮オプションについてユーザ間の合意があれば(これはこれで難しい問題だが)、
中身が同じであるにもかかわらず無駄にCRCの違う書庫を氾濫させることもない。
最後に書庫の同一性を実現する上でいくつかの注意点を述べなければならない。
先に作成される書庫のバイナリはベースフォルダ名に依存しないと述べたが、
これはベース名が2バイト文字を含むかどうかで結果が異なることが判明した。
パス名のエンコード部が影響を与えていると思われるが、無限の名前の可能性が、
2バイト文字の有無の2パターンに限定できるのは依然として大きなことであろう。
WinRARがディレクトリを受けたときに自動的に収集するファイルのソート順は、
ファイルシステム依存であることも既に述べたが、これも注意する必要がある。
FAT32とNTFS5でDOSのDIRコマンドでソートのポリシーを見比べてみるとよい。
この点はWinRARが将来自動ソート格納に対応することで解決されるかもしれない。