26.9.1 ファイル名の構成要素

オペレーティングシステムはファイルをディレクトリーにグループ化します。あるファイルを指定するためには、ディレクトリーとそのディレクトリー内でのファイルの名前を指定しなければなりません。それゆえEmacsはファイル名をディレクトリー名パートと非ディレクトリー(またはディレクトリー内ファイル名)パートという、2つの主要パートから判断します。どちらのパートも空の場合があり得ます。これら2つのパートを結合することによって元のファイル名が再構築されます。21

ほとんどのシステムでは最後のスラッシュ(MS-DOSとMS-Windowsではバックスラッシュも許される)までのすべてがディレクトリーパートです。残りが非ディレクトリーパートです。

ある目的のために、非ディレクトリーパートはさらに正式名称(the name proper)とバージョン番号に細分されます。ほとんどのシステムでは、名前にバージョン番号をもつのはバックアップファイルだけです。

Function: file-name-directory filename

この関数はfilenameのディレクトリーパートをディレクトリー名(ディレクトリーの名前を参照)としてリターンする。filenameがディレクトリーパートを含まなければnilをリターンする。

GNUや他のPOSIX準拠ixシステムでは、この関数がリターンする文字列は常にスラッシュで終わる。MS-DOSではコロンで終わることもあり得る。

(file-name-directory "lewis/foo")  ; GNUの例
     ⇒ "lewis/"
(file-name-directory "foo")        ; GNUの例
     ⇒ nil
Function: file-name-nondirectory filename

この関数はfilenameの非ディレクトリーパートをリターンする。

(file-name-nondirectory "lewis/foo")
     ⇒ "foo"
(file-name-nondirectory "foo")
     ⇒ "foo"
(file-name-nondirectory "lewis/")
     ⇒ ""
Function: file-name-sans-versions filename &optional keep-backup-version

この関数は、任意のファイルバージョン番号、バックアップバージョン番号、末尾のチルダを取り除いたfilenameをリターンする。

keep-backup-versionが非nilなら、ファイルシステムなどが認識するような真のファイルバージョン番号は破棄されるが、バックアップバージョン番号は保持される。

(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"
Function: file-name-extension filename &optional period

この関数はfilenameから、もしあればすべてのバージョン番号とバックアップ番号を取り除いた後の、終端の拡張子(extension)をリターンする。ファイル名の拡張子とは最後の名前コンポーネント(からすべてのバージョン番号とバックアップ番号を取り去った後)の最後の‘.’に後続するパートのこと。

この関数はfooのような拡張子のないファイル名にたいしてはnilfoo.のようなnull拡張子にたいしては""をリターンする。ファイル名の最終コンポーネントが‘.’で始まる場合には、その‘.’は拡張子の開始とはみなされない。したがって.emacsの拡張子は‘.emacs’ではなくnil

periodが非nilなら、拡張子を区切るピリオドもリターン値に含まれる。その場合には、もしfilenameが拡張子をもたなければリターン値は""

Function: file-name-with-extension filename extension

この関数は拡張子にextensionをセットしたfilenameをリターンする。すでにドットがあればextensionの先頭のドットは取り除く。たとえば:

(file-name-with-extension "file" "el")
     ⇒ "file.el"
(file-name-with-extension "file" ".el")
     ⇒ "file.el"
(file-name-with-extension "file.c" "el")
     ⇒ "file.el"

filenameextensionが空、あるいはfilenameがディレクトリー(つまりdirectory-name-pが非nilをリターンする)のようなら、この関数はエラーとなることに注意。

Function: 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"
(file-name-sans-extension "/my/home/.emacs")
     ⇒ "/my/home/.emacs"
(file-name-sans-extension "/my/home/.emacs.el")
     ⇒ "/my/home/.emacs"
(file-name-sans-extension "~/foo.el.~3~")
     ⇒ "~/foo"
(file-name-sans-extension "~/foo.~3~")
     ⇒ "~/foo.~3~"

最後の2つの例の‘.~3~’は拡張子ではなくバックアップ番号であることに注意。

Function: file-name-base filename

これはfile-name-sans-extensionfile-name-nondirectoryを組み合わせた関数。たとえば、

(file-name-base "/my/home/foo.c")
    ⇒ "foo"
Function: file-name-split filename

この関数はファイル名をコンポーネントに分割する。これを適切なディレクトリー区切りを用いてstring-joinの逆を行う関数とみなすことができる。たとえば、

(file-name-split "/tmp/foo.txt")
    ⇒ ("" "tmp" "foo.txt")
(string-join (file-name-split "/tmp/foo.txt") "/")
    ⇒ "/tmp/foo.txt"

Footnotes

(21)

EmacsはGNUの慣習に則りパス名(pathname)ではなくファイル名(file name)という用語を使用する。わたしたちがパス(path)という用語を用いるのは検索パス(ディレクトリーのリスト)にたいしてだけである。


This page has generated for branch:work/emacs-30_69b16e5c63840479270d32f58daea923fe725b90, commit:5e3f74b56ff47b5bcef2526c70f53f749bbd45f6 to check Japanese translation.