タイトル小池邦人のプログラミング日記》2001/4/6<Navigation Serviceと拡張子>〜続きカテゴリーユーザインタフェース, 小池邦人のプログラミング日記
作成日2001/4/6 14:23:20作成者小池邦人
続いて、ファイル名の最後に付けられる「拡張子」の問題点についてです。Mac OS Xでも、保存ファイルにはファイルタイプとクリエータを付加することができます。そういう意味では、Mac OS 9環境からの大きな変更はありません。しかし、Mac OS Xに付属している「Grab」などのCocoaアプリケーションは、ファイルタイプやクリエータを持たないTIFFファイルを保存してしまいます。またマウントされたデジカメのスマートメディアやコンパクトフラッシュのJPEGファイルなども、ファイルタイプを持たないファイルとして認識されているようです。Mac OS 9では、File Exchangeがファイル名の拡張子を判別し、自動でファイルタイプを割り振ってくれていました。ところが、Mac OS Xではその仕組みがまだ存在しないわけです。これはバグなのか?未実装なのか?仕様なのか?当方では判断できませんが、おかげでCocoaアプリが保存したファイルをCarbonアプリでオープンする場合などに大きな不都合が生じています。

通常のCarbonアプリケーションは、ファイルタイプによりファイル種類を認識しており、拡張子の取り扱いはFile Exchangeに任せています。例えば、NavGetFile()では、表示したいファイルタイプを指示することで、好みのファイルだけを選択対象としてリストに表示できるわけです。ところが、Cocoaアプリが保存したTIFFやJPEGファイルにはファイルタイプがありません。よって実際はオープン可能なのに、リスト上ではハイライトとなり選択できないという状況が起きてしまいます。加えてCarbonアプリでは、ドラッグ&ドロップでファイルを取り込めるかどうかの判断にも、ファイルタイプを利用している場合があります。こうした場合、ファイルタイプの無いファイルは、ドラッグ&ドロップの対象外となってしまいます。このような状況を避けるのには、ファイルタイプがゼロの場合に限って、ファイル名の拡張子をチェックしてファイルの種類を判断する処理を追加する必要があります。ひょっとしたら、こうした面度な作業を代行してくれるAPIが、CarbonLibのどこかにお隠れになっているのでしょうか?

File Exchangeの代用機能(?)なのかどうか分かりませんが、ファイル情報ダイアログに「アプリケーション」という機能があります。これにより、ファイルのダブルクリックで起動するアプリケーションを別物に変更することができます。まずは、ファイルタイプとクリエータを持っているファイルについて調べてみました。

 

設定項目を「特定のアプリケーション」にし、メニューで別アプリを選択してやると、確かに変更後のアプリケーションが起動するようになります。しかしアイコン表示は変わりませんので、クリエータを書き換えたわけではなさそうです。次に両情報を持たないファイルについて調べてみました。

 

すると、前はハイライト表示だった一番下の「アプリケーション変更...」というボタンが有効になります。これでアプリを選べば、新規クリエータとファイルタイプが設定されアイコン表示が変わるのだろうと予想したのですが、どうも違うようです。何も変化がありません...。これは、いったいどういう機能なのでしょうか?謎であります。

Cocoaアプリケーションでファイルタイプとクリエータを設定するために、AppleはCocoa環境からCarbon APIを呼ぶ手法を公開しているようです。しかし、根本的な解決には、Cocoaにファイルタイプとクリエータを扱うためのAPIを用意し、ファイルへの両情報の設定を義務付ける必要があると思います。加えて、Mac OS 9並みのFile Exchangeの実装も早急に実現する必要があるでしょう。
[小池邦人/オッティモ]
関連リンク