ファイルシステム内のすべてのディレクトリは、ルートディレクトリを起点とするツリー構造を形成しています。ファイル名は、ツリーのルートから始まるすべてのディレクトリ名を指定することができ、この場合、絶対ファイル名と呼ばれます。あるいは、デフォルトディレクトリを基準としたツリー内でのファイルの位置を指定することもでき、この場合、相対ファイル名と呼ばれます。GNUやその他のPOSIX準拠システムでは、先頭の ‘~’ が展開された後、絶対ファイル名は ‘/’ で始まり(abbreviate-file-name を参照)、相対ファイル名はそうではありません。MS-DOSおよびMS-Windowsでは、絶対ファイル名はスラッシュまたはバックスラッシュ、あるいはドライブ指定 ‘x:/’ で始まり、ここで x は ドライブレター を表します。
この関数は、ファイル filename が絶対ファイル名である場合は t を、そうでない場合は nil
を返します。ファイル名の最初の構成要素が ‘~’ であるか、または
‘~user’ (ここで
user
は有効なログイン名)である場合、そのファイル名は絶対ファイル名とみなされます。以下の例では、‘rms’ という名前のユーザーは存在するが、‘nosuchuser’ という名前のユーザーは存在しないものとします。
(file-name-absolute-p "~rms/foo")
⇒ t
(file-name-absolute-p "~nosuchuser/foo")
⇒ nil
(file-name-absolute-p "rms/foo")
⇒ nil
(file-name-absolute-p "/user/rms/foo")
⇒ t
相対パスである可能性のあるファイル名が与えられた場合、先頭の ‘~’
を展開し、その結果を expand-file-name を用いて絶対パスに変換できます(ファイル名を展開する関数を参照)。この関数は、絶対ファイル名を相対ファイル名に変換します:
この関数は、結果が directory(絶対ディレクトリ名またはディレクトリファイル名)を基準として解釈されることを前提に、filename と等価な相対名を返そうとします。directory
が省略された場合や nil
が指定された場合は、現在のバッファのデフォルトディレクトリが使用されます。
On some operating systems, an absolute file name begins with a device name.
On such systems, filename has no relative equivalent
based on directory if they start with two different
device names. In this case, file-relative-name
returns filename in absolute form.
(file-relative-name "/foo/bar" "/foo/")
⇒ "bar"
(file-relative-name "/foo/bar" "/hack/")
⇒ "../foo/bar"
空文字列のファイル名は、現在のバッファのデフォルトディレクトリを表します。