File Name Components
--------------------
The operating system groups files into directories. To specify a
file, you must specify the directory and the file's name within that
directory. Therefore, Emacs considers a file name as having two main
parts: the "directory name" part, and the "nondirectory" part (or "file
name within the directory"). Either part may be empty. Concatenating
these two parts reproduces the original file name.
On most systems, the directory part is everything up to and including
the last slash (backslash is also allowed in input on MS-DOS or
MS-Windows); the nondirectory part is the rest. The rules in VMS syntax
are complicated.
For some purposes, the nondirectory part is further subdivided into
the name proper and the "version number". On most systems, only backup
files have version numbers in their names. On VMS, every file has a
version number, but most of the time the file name actually used in
Emacs omits the version number, so that version numbers in Emacs are
found mostly in directory lists.
- Function: file-name-directory filename
This function returns the directory part of FILENAME (or `nil' if
FILENAME does not include a directory part). On most systems, the
function returns a string ending in a slash. On VMS, it returns a
string ending in one of the three characters `:', `]', or `>'.
(file-name-directory "lewis/foo") ; Unix example
=> "lewis/"
(file-name-directory "foo") ; Unix example
=> nil
(file-name-directory "[X]FOO.TMP") ; VMS example
=> "[X]"
- Function: file-name-nondirectory filename
This function returns the nondirectory part of FILENAME.
(file-name-nondirectory "lewis/foo")
=> "foo"
(file-name-nondirectory "foo")
=> "foo"
;; The following example is accurate only on VMS.
(file-name-nondirectory "[X]FOO.TMP")
=> "FOO.TMP"
- Function: file-name-sans-versions filename &optional
keep-backup-version
This function returns FILENAME with any file version numbers,
backup version numbers, or trailing tildes discarded.
If KEEP-BACKUP-VERSION is non-`nil', then true file version
numbers understood as such by the file system are discarded from
the return value, but backup version numbers are kept.
(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"
;; The following example applies to VMS only.
(file-name-sans-versions "foo;23")
=> "foo"
- Function: file-name-sans-extension filename
This function returns FILENAME minus its "extension," if any. The
extension, in a file name, is the part that starts with the last
`.' in the last name component. For example,
(file-name-sans-extension "foo.lose.c")
=> "foo.lose"
(file-name-sans-extension "big.hack/foo")
=> "big.hack/foo"
- Function: file-name-extension filename &optional period
This function returns FILENAME's final "extension," if any, after
applying `file-name-sans-versions' to remove any version/backup
part. If PERIOD is non-nil, then the returned value includes the
period that delimits the extension, and if FILENAME has no
extension, the value is `""'.