Express File Paths in Canonical Form
Convert file paths to canonical form for the platform, to display them in a user-understandable form and so that relative and absolute paths can be compared.
normalizePath(path, winslash = "\\", mustWork = NA)
- character vector of file paths.
- the separator to be used on Windows -- ignored
elsewhere. Must be one of
- logical: if
TRUEthen an error is given if the result cannot be determined; if
NAthen a warning.
path.expand) is first done on
Where the Unix-alike platform supports it attempts to turn paths into
absolute paths in their canonical form (no ./, ../ nor
symbolic links). It relies on the POSIX system function
realpath: if the platform does not have that (we know of no
current example) then the result will be an absolute path but might
not be canonical. Even where
realpath is used the canonical
path need not be unique, for example via hard links or
On Windows it converts relative paths to absolute paths, converts
short names for path elements to long names and ensures the separator
is that specified by
winslash. It will match paths
case-insensitively and return the canonical case.
UTF-8-encoded paths not valid in the current locale can be used.
mustWork = FALSE is useful for expressing paths for use in
A character vector.If an input is not a real path the result is system-dependent (unless
mustWork = TRUE, when this should be an error). It will be
either the corresponding input element or a transformation of it into
an absolute path.Converting to an absolute file path can fail for a large number of
reasons. The most common areOne of more components of the file path does not exist.
A component before the last is not a directory, or there is
insufficient permission to read the directory.
For a relative path, the current directory cannot be
A symbolic link points to a non-existent place or links form a
The canonicalized path would be exceed the maximum supported
length of a file path.
The canonical form of paths may not be what you expect. For example, on OS X absolute paths such as /tmp and /var are symbolic links.