ファイルシステム内のすべてのディレクトリーはルートディレクトリーから開始されるツリーを形成します。このツリーのルートから開始されるすべてのディレクトリー名によりファイル名を指定でき、それを絶対(absolute)ファイル名と呼びます。デフォルトディレクトリーからの相対的なツリー中の位置でファイルを指定することもでき、それらは相対(relative)ファイル名と呼ばれます。GNUや他のPOSIX準拠システムでは‘~’で開始されるすべてのファイル名は‘/’で始まる絶対ファイル名(abbreviate-file-nameを参照)に展開されますが、相対ファイル名は展開されません。。MS-DOSとMS-Windowsでは絶対ファイル名はスラッシュ、バックスラッシュ、またはドライブ指定‘x:/’で始まります。ここでxはドライブ文字(drive letter)です。
この関数はファイル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
なら、カレントバッファーのデフォルトディレクトリーがデフォルト。
絶対ファイル名がデバイス名で始まるオペレーティングシステムがいくつか存在する。そのようなシステムでは、2つの異なるデバイス名から開始されるfilenameは、directoryにもといた等価な相対ファイル名をもたない。この場合には、file-relative-name
は絶対形式でfilenameをリターンする。
(file-relative-name "/foo/bar" "/foo/") ⇒ "bar" (file-relative-name "/foo/bar" "/hack/") ⇒ "../foo/bar"
空文字列であるようなファイル名は、カレントバッファーのデフォルトディレクトリーを意味しています。