« # Androidを見捨てることにしました | トップページ | # Apple世界のワクワク感 »

2010.12.20

# ファイルの圧縮と解凍で気をつけたいこと

取引先から送られてきた圧縮ファイルを解凍したら、

- フォルダの中が空っぽだった
- あるはずのファイルが一部足りなかった

なんて経験ありませんか?

私も、初めてこの現象に遭遇したとき(後者でした)は、あわてて取引先に問い合わせたりもしましたが、実は Windows の圧縮解凍ソフトの中には、

パス名の合計は255文字が上限

という Windows の制限に引っかかるものがあり、この上限を超えると圧縮解凍が正しく動作しません(というか、ふつうにファイルを操作していても、この上限を超えるといろいろ不具合が起きます。ファイルをコピーできないとか)。

一般的な使い方であれば、フォルダが何段かの多層になっていても合計のパス名がこの上限を超えるなどそうそうあることではないのですが、ローカライズ業務では、ファイル名自体がうんざりするほど長いこともあり、この制限にぶつかることは、けっして珍しくありません。

圧縮解凍ソフトはたくさん出回っていますが、たとえば Lhaca(デラックス版も含む)や Lhasa のようなフリーウェアがこれに該当します。

私も、ふだんは Lhaca(デラックス版)を使っていますが、怪しいときには、7-Zip というフリーウェアを使うようにしています。

Lhaca で簡単な実験をしてみました。C:\ ドライブの直下に、

samplefoldersamplefoldersamplefoldersamplefoldersamplefolder(12x5=60文字)
 │
 └samplefoldersamplefoldersamplefoldersamplefoldersamplefolder
    │
    └samplefoldersamplefoldersamplefoldersamplefoldersamplefolder
      │
      └sampledocument.doc

という 3 階層を作って doc ファイルを置きました。

101220_lhaca_1

これで、パス名は 204 文字(ドライブ文字を含めて)になりました。これを圧縮し(この時点では文字数に余裕があるのでエラーにならない)、Lhaca で解凍してみると、

101220_lhaca_2

こんな風に、フォルダの中身が空になりました。

ただし、圧縮前に 255 文字を超えていなかったのになぜこの現象が再現したかというと、Lhaca の設定上にちょっとしたトリックがあります。

101220_lhaca_3

デスクトップに置いた圧縮ファイルを解凍したら中身がぜんぶデスクトップ上にぶちまけられてしまったー、みたいなことがあるので、通常は「フォルダを作ってその中に解凍」という設定をオンにしています。こうすると圧縮前の状態よりフォルダが 1 階層分増えます。上のショットを見るとわかりますが、圧縮前は 3 階層だったのが、解凍後は 4 階層になっています。つまり、1 階層分の 60 文字が増えたために 255 文字の上限を超えてしまい、上の現象が起こったということです。

リンク: 7-Zip

ところで、Windows 7 とかならこんなこと起きないんですよね、当然?

それとも 32 ビット版だと今でもこうなの?

03:01 午後 パソコン・インターネット |

はてなブックマークに追加

« # Androidを見捨てることにしました | トップページ | # Apple世界のワクワク感 »

トラックバック


この記事へのトラックバック一覧です: # ファイルの圧縮と解凍で気をつけたいこと:

コメント

Windows 7を使っています。
条件はまったく同じというわけではありませんが、
baldhatterさんが設定されたフォルダ名で3階層を
作り、これも同じ名前でファイルを作成して保存。
Lhacaは先日のトラブルで消えてしまったので、
WinZip 11.2を使って圧縮・解凍してみましたが、
ファイルは消えませんでした。
条件が違いすぎてあまり参考になりませんが、
ご報告まで。

投稿: Jack | 2010/12/22 0:02:49

Jack さん、さっそくご確認くださったようで、ありがとうございます。WinZip はもしかしたら XP やそれ以前の OS 上でもパス長の上限にひっかかっていなかったかもしれません。会社の PC には WinZip が入っていて、あの当時こういう現象は一度も見たことがありませんでしたから。

投稿: baldhatter | 2010/12/22 19:51:48

この記事へのコメントは終了しました。