kagamihogeの日記

kagamihogeの日記です。

FAT タイプの決定方法

ファイルシステム。Windows PCではNTFSが主流、将来的にはWinFSに切り替わっていくと思われる。最近知ったことなのだが、SDカードやらUSBメモリやらのファイルシステムはFATになっている。

FATには、内部の構造によってFAT12/16/32の3タイプがある*1。これをさわるプログラムは、どのFATタイプか判別してやる必要があるのだが、MSの資料と現実がどうも違う。

MSの資料では「FATの判別はディスク(ハードディスクの場合はパーティション)の容量によって行う」と書いてある。FAT12/16/32で扱える最大容量がぜんぜん違うので、この方法は正しいといえば正しい。

ここで疑問なのが、FAT12と判定されるような小さいディスクをFAT16/32でフォーマットしたらどうなるのか?

これは、MSの仕様「だけ」に沿ってるとFAT12と判定されます。当然、まともなデータは読み出せません・・・。

とはいえ、世の中おおよそMSの判定方法に従っているので、実用上はそれで問題ない。ただ、ファイルシステムをコンバートするようなツールなんかを使うとこの判定方法にひっかからくなる。webで調べて見るとFAT16/32しか認識しないカードリーダーがあったり、FATの認識にバグがありました、とかがあったり・・・。とにかく、完全なFATの判定方法が見つかりませんでした*2

結局FATの判定方法は、MSの例の方法とブートセクタのFAT32のときは設定されるけどFAT12/16のときは設定されない値を見る、など複合的な方法を取るしかないっぽい。MS仕様に沿ってりゃいいよ、って仕様にするならそれでもいいんだけどさ。

*1:実際にはこれ以外のFATxxもあるらしいが、まず使われることはないので省略

*2:いや、あるのかどうかすら謎だけど・・・