Mac でファイル名に使えない文字はたったひとつだけ、 /
である。そんなはずはないぞ、と思う人もいるかもしれない。たとえば、 web ページのリンクを保存するとファイル名にスラッシュが入っていることがある:
実は、このファイル名を ls
コマンドなどで表示すると http-::
… となっていることがわかる。ファイル名に含まれるコロンは Finder からはスラッシュに見えるのである(touch foo:bar.txt; open .
などと実行して確かめてみてほしい)。では Finder からファイル名にコロンを入力すればどうなるかというと、そのようなファイル名では保存できないようになっている。
この理由は、 OS X 以前の Mac OS ではコロンがパスの区切り文字として使われていたことによる。古い Mac ではスラッシュに特別な意味がなかったのでファイル名に含めることができたが、 Unix ベースとなった OS X ではスラッシュがパスの区切り文字になったため、ファイル名にスラッシュを使えなくなってしまった。そこで、表示上の互換性を取るために、 OS X では特別な意味がなくなったコロンをスラッシュの代用文字としたのである。
Cocoa や CoreFoundation のメソッド/関数でファイルにデータを書き込む場合、ファイル名にスラッシュを含めないようにすることと、コロンは Finder からスラッシュに見えることに気をつける必要がある。
補足:より正確にいうと、ファイルシステムのレイヤーでは依然コロンがパス区切り文字として使われている。ファイルシステムにおけるコロンは Unix レイヤーではスラッシュに(そしてスラッシュはコロンに)変換される。変換の図式を以下に示す:
Layer | Path
=====================================================
Finder | path folder -> to folder -> foo/bar.txt
------------+----------------------------------------
Unix | /path/to/foo:bar.txt
------------+----------------------------------------
Filesystem | :path:to:foo/bar.txt