次: , 前: File Names, 上: File Names


24.8.1 ファイル名の構成要素

オペレーティングシステムは、一連のファイルをディレクトリにまとめます。 ファイルを指定するには、ディレクトリと当該ディレクトリ内のファイルの名前を 指定する必要があります。 そのためEmacsは、ファイル名には2つの部分、 ディレクトリ名(directory name)部分と 非ディレクトリ名(nondirectory name)部分 (つまりディレクトリ内のファイル名)があるとみなします。 どちらかの部分は空でもかまいません。 これらの2つの部分を連結するともとのファイル名になります。

UNIXでは、ディレクトリ部分は最後のスラッシュまでを含んだ部分であり、 非ディレクトリ部分は残りの部分です。 VMSの構文規則は複雑です。

ある種の目的のために、非ディレクトリ部分をさらに 名前だけの部分と版番号(version number)に分けます。 UNIXでは、バックアップファイルだけにそれらの名前に版番号があります。 VMSでは各ファイルに版番号がありますが、 ほとんどの場合、Emacsで実際に使うファイル名では版番号を省略します。 そのため、Emacsで版番号が見えるのは多くの場合ディレクトリ一覧です。

— 機能: file-name-directory filename

この関数はfilenameのディレクトリ部分 (ディレクトリ部分がなければnil)を返す。 UNIXでは、この関数はスラッシュで終る文字列を返す。 VMSでは、`:'、`]'、`>'のいずれかで終る文字列を返す。

          
          (file-name-directory "lewis/foo")  ; UNIXの例
               => "lewis/"
          
          (file-name-directory "foo")        ; UNIXの例
               => nil
          
          (file-name-directory "[X]FOO.TMP") ; VMSの例
               => "[X]"
     
— 機能: file-name-nondirectory filename

この関数はfilenameの非ディレクトリ部分を返す。

          (file-name-nondirectory "lewis/foo")
               => "foo"
          (file-name-nondirectory "foo")
               => "foo"
          
          ;; つぎの例はVMSでのみ正確である
          (file-name-nondirectory "[X]FOO.TMP")
               => "FOO.TMP"
     
— 機能: file-name-sans-versions filename

この関数は、filenameから版番号、バックアップ版番号、 末尾のティルダをすべて削除したものを返す。

          (file-name-sans-versions "~rms/foo.~1~")
               => "~rms/foo"
          (file-name-sans-versions "~rms/foo~")
               => "~rms/foo"
          (file-name-sans-versions "~rms/foo")
               => "~rms/foo"
          
          ;; つぎの例はVMSでのみ正確である
          (file-name-sans-versions "foo;23")
               => "foo"
     
— 機能: file-name-sans-extension filename

この関数は、filenameからあれば『拡張子』を除いたものを返す。 ファイル名の拡張子とは、 名前の最後の部分にある`.'で始まる部分である。 たとえばつぎのとおりである。

          (file-name-sans-extension "foo.lose.c")
               => "foo.lose"
          (file-name-sans-extension "big.hack/foo")
               => "big.hack/foo"