ファイルAPI調査(3)

もちろん、HFS上には255文字のファイル名を持つファイルというのは作れないので、FSCreateFileUnicodeを使うとしても常に255文字使えると言うことにはならない。


このため、事前に書き込み先のボリュームがどんなファイルシステムを使っているのか調べる、ということが必要になってくるかも知れない(普通はしないか)。

前にも書いたが、こういうこと気にするのは

  • Renamerのようなファイル名の一括変換処理を行なうもの
  • ClipSのようにクリップボードやメールなどのテキストを先頭から何文字かとってファイル名にしてしまうという処理を行なうもの
  • ファイルアーカイバ(StuffIt!とかtarとか)
  • ダウンローダのようなもの
など、ファイルを作る際にユーザにファイル名を指定してもらわない処理の場合である。 普通にSaveAsダイアログを使う場合、返ってきたエラーコードを見てメッセージを表示する程度でOKなはず。

って今、FSCreateFileUnicodeを使ってMacOS XでHFS上に漢字40文字のファイルを作ろうとしたら、エラーコード-50 (paramErr)が返ってきた…。
ここは一つ、-1410(errFSNameTooLong)を返して欲しいところ。エラー処理しにくい。

で、具体的なファイルシステムの調べ方。

実際にファイルを作ってみてエラーコードから推測。

うそ。

FSGetVolumeInfoをkFSVolInfoFSInfoで呼び出すと、FSVolumeInfo.signatureに以下のコードが返ってくる。

ファイルシステム名 説明 signature 定数定義
HFS MacOS標準フォーマット 0x4244 kHFSSigWord
HFS+ MacOS拡張フォーマット 0x482B kHFSPlusSigWord
MFS System7以前のフラットファイルシステム 0xD2D7  
UFS UNIXファイルシステム 0x4B48  
NFS ネットワークファイルシステム 0x4E4A  
AFS   不明  
SMBFS   不明  
WebDAV   不明(マウントしてる?Finderがそう見せてるだけ?)  
UDF   不明  
FAT   不明  

不明な部分はそのうち調べよう。

逆にHFS+上にファイルを作るとは言っても、FSp系では255文字のファイル名を持つファイルは作れない。
ので、例えば255文字のファイル名を持つリソースファイルを1発では作れない。
FSpCreateResFileしかないので…って、もしかしたらFSCreateForkでいきなりファイルが作れるのかな?

要調査。