Function std.path.relativePath
Translates
into a relative path.
path
The returned path is relative to
, which is by default
taken to be the current working directory. If specified,
base
must be an absolute path, and it is always assumed
to refer to a directory. If base
and path
refer to
the same directory, the function returns base
.
.
The following algorithm is used:
- If
is a relative directory, return it unaltered.path
- Find a common root between
andpath
. If there is no common root, returnbase
unaltered.path
- Prepare a string with as many
or../
as necessary to reach the common root from..\
base
path
. - Append the remaining segments of
to the string and return.path
In the second step, path
components are compared using
,
where filenameCmp
!cscs
is an optional template parameter determining whether
the comparison is case sensitive or not. See the
filenameCmp
documentation for details.
This function allocates memory.
Prototype
string relativePath(std.path.CaseSensitive cs)( string path, string base = getcwd() );
Parameters
Name | Description |
---|---|
cs | Whether matching path name components against the base path should
be case-sensitive or not. |
path | A path name. |
base | The base path to construct the relative path from. |
Returns
The relative path
.
See Also
asRelativePath
which does not allocate memory
Examples
assert (relativePath("foo") == "foo"); version (Posix) { assert (relativePath("foo", "/bar") == "foo"); assert (relativePath("/foo/bar", "/foo/bar") == "."); assert (relativePath("/foo/bar", "/foo/baz") == "../bar"); assert (relativePath("/foo/bar/baz", "/foo/woo/wee") == "../../bar/baz"); assert (relativePath("/foo/bar/baz", "/foo/bar") == "baz"); } version (Windows) { assert (relativePath("foo",c:\bar
) == "foo"); assert (relativePath(c:\foo\bar
,c:\foo\bar
) == "."); assert (relativePath(c:\foo\bar
,c:\foo\baz
) ==..\bar
); assert (relativePath(c:\foo\bar\baz
,c:\foo\woo\wee
) ==..\..\bar\baz
); assert (relativePath(c:\foo\bar\baz
,c:\foo\bar
) == "baz"); assert (relativePath(c:\foo\bar
,d:\foo
) ==c:\foo\bar
); }
Throws
Exception
if the specified base directory is not absolute.
Authors
Lars Tandle Kyllingstad, Walter Bright, Grzegorz Adam Hankiewicz, Thomas Kühne, Andrei Alexandrescu