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, returnbaseunaltered.path - Prepare a string with as many
or../as necessary to reach the common root from..\basepath. - 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