Next: , Previous: , Up: File Names   [Contents][Index]


24.8.3 Directory Names

ディレクトリー名(directory name)とは、ディレクトリーの名前のことです。ディレクトリーは実際にはファイルの一種なので、ファイル名をもちます。これはディレクトリー名と関連がありますが、同一ではありません(これは、Unixの通常の用語とは異なる)。同じ実体にたいするこれら2つの異なる名前は、構文的な変換により関連付けられます。GNUおよびUnixシステムでは、ことは単純です。ディレクトリー名はスラッシュで終わり、ファイルとしてのディレクトリーの名前には、そのスラッシュがありません。MS-DOSでは、この関連付けはより複雑です。

ディレクトリー名と、ファイルとしてのディレクトリーの名前の違いは、些細ですが重要です。Emacsの変数、または関数の引数を記述する際、それがディレクトリー名であるとしており、ディレクトリーのファイル名は許されません。file-name-directoryが文字列をリターンするときは、常にディレクトリー名です。

以下の2つの関数は、ディレクトリー名とファイル名の間で変換を行います。これらの関数は、‘$HOME’のような環境変数や、‘~’、‘.’、‘..’などの構文にたいして、特別なことは何も行いません。

Function: file-name-as-directory filename

この関数は、オペレーティングシステムがディレクトリーの名前と解釈する形式で、filenameを表す文字列をリターンする。ほとんどのシステムでは、(もし終端にそれがなければ)これは文字列にスラッシュを追加することを意味する。

(file-name-as-directory "~rms/lewis")
     ⇒ "~rms/lewis/"
Function: directory-file-name dirname

この関数は、オペレーティングシステムがファイルの名前と解釈する形式で、dirnameを表す文字列をリターンする。ほとんどのシステムでは、これは文字列から最後のスラッシュ(またはバックスラッシュ)を削除することを意味する。

(directory-file-name "~lewis/")
     ⇒ "~lewis"

ディレクトリーにたいしては、concatを使用して相対ファイルと組み合わせることができます:

(concat dirname relfile)

これを行う前に、ファイル名が相対的であるか確認してください。絶対ファイル名を使用した場合、結果は構文的に不正になるか、間違ったファイルを参照する可能性があります。

ディレクトリーファイル名作成にこのような組み合わせを使用したい場合は、最初にfile-name-as-directoryを使用して、それをディレクトリー名に変換しなければなりません:

(concat (file-name-as-directory dirfile) relfile)

以下のような、手動によるスラッシュの結合を試みてはなりません

;;; 間違い!
(concat dirfile "/" relfile)

なぜなら、これには可搬性がないからです。常にfile-name-as-directoryを使用してください。

ディレクトリー名をディレクトリーの省略名に変換するには、以下の関数を使用します:

Function: abbreviate-file-name filename

この関数は、filenameの省略された形式をリターンする。これはdirectory-abbrev-alist(see File Aliases in The GNU Emacs Manual)で指定される省略形を適用した後、引数のファイル名がユーザーのホームディレクトリー、またはそのサブディレクトリーにある場合は、それを‘~’に置き換える。ホームディレクトリーがルートディレクトリーの場合、多くのシステムでは結果が短縮されないので、‘~’で置き換えない。

これは名前の一部であるような省略形さえも認識するので、ディレクトリー名とファイル名にも使用できる。