pathname—a pathname designator.
default-pathname—a pathname designator.
The default is the value of *default-pathname-defaults*
.
default-version—a valid pathname version. The default is :newest.
merged-pathname—a pathname.
Constructs a pathname from pathname by filling in any unsupplied components with the corresponding values from default-pathname and default-version.
Defaulting of pathname components is done by filling in components taken from another pathname. This is especially useful for cases such as a program that has an input file and an output file. Unspecified components of the output pathname will come from the input pathname, except that the type should not default to the type of the input pathname but rather to the appropriate default type for output from the program; for example, see the function compile-file-pathname.
If no version is supplied, default-version is used.
If default-version is nil
, the version component will remain unchanged.
If pathname explicitly specifies a host and not a device, and if the host component of default-pathname matches the host component of pathname, then the device is taken from the default-pathname; otherwise the device will be the default file device for that host. If pathname does not specify a host, device, directory, name, or type, each such component is copied from default-pathname. If pathname does not specify a name, then the version, if not provided, will come from default-pathname, just like the other components. If pathname does specify a name, then the version is not affected by default-pathname. If this process leaves the version missing, the default-version is used. If the host's file name syntax provides a way to input a version without a name or type, the user can let the name and type default but supply a version different from the one in default-pathname.
If pathname is a stream, pathname effectively
becomes (pathname
pathname)
. merge-pathnames
can be used on either an open or a closed stream.
If pathname is a pathname it represents the name used to open the file. This may be, but is not required to be, the actual name of the file.
merge-pathnames
recognizes a logical pathname namestring
when default-pathname is a logical pathname,
or when the namestring begins with
the name of a defined logical host followed by a colon.
In the first of these two cases,
the host portion of the logical pathname namestring
and its following colon are optional.
merge-pathnames
returns a
logical pathname if and only if
its first argument is a logical pathname,
or its first argument is a logical pathname namestring with an explicit host,
or its first argument does not specify a host
and the default-pathname is a logical pathname.
Pathname merging treats a relative directory specially.
If (pathname-directory
pathname)
is a list whose
car is :relative, and
(pathname-directory
default-pathname)
is a list, then
the merged directory is the value of
(append (pathname-directory default-pathname) (cdr ;remove :relative from the front (pathname-directory pathname)))
except that if the resulting list contains a string or :wild
immediately followed by :back, both of them are removed. This removal of
redundant :back keywords is repeated as many times as possible.
If (pathname-directory
default-pathname)
is not a list or
(pathname-directory
pathname)
is not a list
whose car is :relative, the merged directory is
(or (pathname-directory
pathname) (pathname-directory
default-pathname))
merge-pathnames
maps customary case in pathname
into customary case in the output pathname.
(merge-pathnames "CMUC::FORMAT"
"CMUC::PS:<LISPIO>.FASL")
→ #P"CMUC::PS:<LISPIO>FORMAT.FASL.0"
*default-pathname-defaults*, pathname (System Class), logical-pathname (System Class), Section 20.1 (File System Concepts), Section 19.1.2 (Pathnames as Filenames)
The net effect is that if just a name is supplied, the host, device, directory, and type will come from default-pathname, but the version will come from default-version. If nothing or just a directory is supplied, the name, type, and version will come from default-pathname together.