何十万件という画像ファイルをを外付けHDDへリネームしながらコピーする──というバッチ処理をしていたわけなのですが、途中で止まる…。
うーわー、私どっかで書き間違えた?
と思ってリネーム・ツールのロジックを調べるわけですが、理屈は通っていて、どうも原因がわからない。というわけで、デバッグモードでリトライ。
再び停止。しかも停止するのはどうやらマッタク同じ画像ファイルのコピー作業ときたものです。
コピー元の画像になんらかの制限がかかっているようでもないし、コピー先のフォルダもちゃんと存在している。どこがおかしいんだろう、と思って、とりあえず
- 手作業でそのファイルをリネームしてコピー先のディレクトリにコピーする→エラー。
- 違うディレクトリにコピーするとコピー可。
- 結論:どうやらロジックのミスではない。
むむむ、と思って、外付けHDDのファイルフォーマットをみると、あろうことかFAT32。FAT32ってなにかファイル数とか制限なかったっけ?と思って、拒否してくるディレクトリのファイル数を見てみると21,844件。…あれ?
FAT32のファイル制限数ってもう少しなかったっけ?──と思ってMSサイトへとんでみると、以下は MS-DOS の 8.3 形式に準拠するファイル名をつけた場合に、ディレクトリ内に保存できるファイル数です
ということで、65,534件の数字が出ている。
「でも私のつけているファイル名は8.3形式のファイル名ではないなぁ…」と思って更にヘルプを読み進めると、ファイル名が 13 文字以上の場合は、さらにもう 1 つディレクトリ エントリが使用
とあって、その下に実際のファイル名と利用されるディレクトリエントリの一覧がある。65,534=21,844×3だし、原因はこれか…。
というわけで、なんだか8.3形式(しかも大文字で)のワナにハマった話でした。うっかり忘れそうなのでUP。
0 件のコメント:
コメントを投稿