Whether matching path name components against the base path should be case-sensitive or not.
A path name.
The base path to construct the relative path from.
The relative path.
Exception if the specified base directory is not absolute.
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`); }
asRelativePath which does not allocate memory
Translates path into a relative path.
The returned path is relative to base, 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 path and base refer to the same directory, the function returns `.`.
The following algorithm is used:
In the second step, path components are compared using filenameCmp!cs, where cs is an optional template parameter determining whether the comparison is case sensitive or not. See the filenameCmp documentation for details.
This function allocates memory.