Pathnames as Filenames (original) (raw)

ANSI Common Lisp 19 Filenames 19.1 Overview of Filenames

19.1.2 Pathnames as Filenames

Pathnames are structured objects that can represent, in an implementation-independent way, the filenames that are used natively by an underlying file system.

In addition, pathnames can also represent certain partially composed filenames for which an underlying _file system_might not have a specific namestring representation.

A pathname need not correspond to any file that actually exists, and more than one pathname can refer to the same file. For example, the pathname with a version of :newestmight refer to the same file as a _pathname_with the same components except a certain number as the version. Indeed, a pathname with version :newest might refer to different files as time passes, because the meaning of such a _pathname_depends on the state of the file system.

Some file systems naturally use a structural model for their_filenames_, while others do not. Within the Common Lisp pathname model, all filenames are seen as having a particular structure, even if that structure is not reflected in the underlying file system. The nature of the mapping between structure imposed by _pathnames_and the structure, if any, that is used by the underlying _file system_is implementation-defined.

Every pathname has six components: a host, a device, a directory, a name, a type, and a version. By naming files with pathnames, Common Lisp programs can work in essentially the same way even in _file systems_that seem superficially quite different. For a detailed description of these components, see Section 19.2.1 Pathname Components.

The mapping of the pathname components into the concepts peculiar to each file system is implementation-defined. There exist conceivable _pathnames_for which there is no mapping to a syntactically valid _filename_in a particular implementation. An implementation may use various strategies in an attempt to find a mapping; for example, an implementation may quietly truncate _filenames_that exceed length limitations imposed by the underlying file system, or ignore certain pathname components for which the file system provides no support. If such a mapping cannot be found, an error of type file-error is signaled.

The time at which this mapping and associated error signaling occurs is implementation-dependent. Specifically, it may occur at the time the pathname is constructed, when coercing a pathname to a namestring, or when an attempt is made to open or otherwise access the file designated by the pathname.

The next figure lists some defined names that are applicable to pathnames.

Pathname Operations

*default-pathname-defaults* namestring pathname-name
directory-namestring open pathname-type
enough-namestring parse-namestring pathname-version
file-namestring pathname pathnamep
file-string-length pathname-device translate-pathname
host-namestring pathname-directory truename
make-pathname pathname-host user-homedir-pathname
merge-pathnames pathname-match-p wild-pathname-p