Examples:
version(Win32)
{
assert (FilePath("/foo".dup).append("bar").pop() == "/foo");
assert (FilePath("/foo/".dup).append("bar").pop() == "/foo");
auto fp = new FilePath(r"C:/home/foo/bar".dup);
fp ~= "john";
assert (fp == r"C:/home/foo/bar/john");
fp.set (r"C:/");
fp ~= "john";
assert (fp == r"C:/john");
fp.set("foo.bar");
fp ~= "john";
assert (fp == r"foo.bar/john");
fp.set("");
fp ~= "john";
assert (fp == r"john");
fp.set(r"C:/home/foo/bar/john/foo.d".dup);
assert (fp.pop() == r"C:/home/foo/bar/john");
assert (fp.pop() == r"C:/home/foo/bar");
assert (fp.pop() == r"C:/home/foo");
assert (fp.pop() == r"C:/home");
assert (fp.pop() == r"C:");
assert (fp.pop() == r"C:");
// special case for popping empty names
fp.set (r"C:/home/foo/bar/john/".dup);
assert (fp.parent == r"C:/home/foo/bar");
fp = new FilePath;
fp.set (r"C:/home/foo/bar/john/".dup);
assert (fp.isAbsolute);
assert (fp.name == "");
assert (fp.folder == r"/home/foo/bar/john/");
assert (fp == r"C:/home/foo/bar/john/");
assert (fp.path == r"C:/home/foo/bar/john/");
assert (fp.file == r"");
assert (fp.suffix == r"");
assert (fp.root == r"C:");
assert (fp.ext == "");
assert (fp.isChild);
fp = new FilePath(r"C:/home/foo/bar/john".dup);
assert (fp.isAbsolute);
assert (fp.name == "john");
assert (fp.folder == r"/home/foo/bar/");
assert (fp == r"C:/home/foo/bar/john");
assert (fp.path == r"C:/home/foo/bar/");
assert (fp.file == r"john");
assert (fp.suffix == r"");
assert (fp.ext == "");
assert (fp.isChild);
fp.pop();
assert (fp.isAbsolute);
assert (fp.name == "bar");
assert (fp.folder == r"/home/foo/");
assert (fp == r"C:/home/foo/bar");
assert (fp.path == r"C:/home/foo/");
assert (fp.file == r"bar");
assert (fp.suffix == r"");
assert (fp.ext == "");
assert (fp.isChild);
fp.pop();
assert (fp.isAbsolute);
assert (fp.name == "foo");
assert (fp.folder == r"/home/");
assert (fp == r"C:/home/foo");
assert (fp.path == r"C:/home/");
assert (fp.file == r"foo");
assert (fp.suffix == r"");
assert (fp.ext == "");
assert (fp.isChild);
fp.pop();
assert (fp.isAbsolute);
assert (fp.name == "home");
assert (fp.folder == r"/");
assert (fp == r"C:/home");
assert (fp.path == r"C:/");
assert (fp.file == r"home");
assert (fp.suffix == r"");
assert (fp.ext == "");
assert (fp.isChild);
fp = new FilePath(r"foo/bar/john.doe".dup);
assert (!fp.isAbsolute);
assert (fp.name == "john");
assert (fp.folder == r"foo/bar/");
assert (fp.suffix == r".doe");
assert (fp.file == r"john.doe");
assert (fp == r"foo/bar/john.doe");
assert (fp.ext == "doe");
assert (fp.isChild);
fp = new FilePath(r"c:doe".dup);
assert (fp.isAbsolute);
assert (fp.suffix == r"");
assert (fp == r"c:doe");
assert (fp.folder == r"");
assert (fp.name == "doe");
assert (fp.file == r"doe");
assert (fp.ext == "");
assert (!fp.isChild);
fp = new FilePath(r"/doe".dup);
assert (fp.isAbsolute);
assert (fp.suffix == r"");
assert (fp == r"/doe");
assert (fp.name == "doe");
assert (fp.folder == r"/");
assert (fp.file == r"doe");
assert (fp.ext == "");
assert (fp.isChild);
fp = new FilePath(r"john.doe.foo".dup);
assert (!fp.isAbsolute);
assert (fp.name == "john.doe");
assert (fp.folder == r"");
assert (fp.suffix == r".foo");
assert (fp == r"john.doe.foo");
assert (fp.file == r"john.doe.foo");
assert (fp.ext == "foo");
assert (!fp.isChild);
fp = new FilePath(r".doe".dup);
assert (!fp.isAbsolute);
assert (fp.suffix == r"");
assert (fp == r".doe");
assert (fp.name == ".doe");
assert (fp.folder == r"");
assert (fp.file == r".doe");
assert (fp.ext == "");
assert (!fp.isChild);
fp = new FilePath(r"doe".dup);
assert (!fp.isAbsolute);
assert (fp.suffix == r"");
assert (fp == r"doe");
assert (fp.name == "doe");
assert (fp.folder == r"");
assert (fp.file == r"doe");
assert (fp.ext == "");
assert (!fp.isChild);
fp = new FilePath(r".".dup);
assert (!fp.isAbsolute);
assert (fp.suffix == r"");
assert (fp == r".");
assert (fp.name == ".");
assert (fp.folder == r"");
assert (fp.file == r".");
assert (fp.ext == "");
assert (!fp.isChild);
fp = new FilePath(r"..".dup);
assert (!fp.isAbsolute);
assert (fp.suffix == r"");
assert (fp == r"..");
assert (fp.name == "..");
assert (fp.folder == r"");
assert (fp.file == r"..");
assert (fp.ext == "");
assert (!fp.isChild);
fp = new FilePath(r"c:/a/b/c/d/e/foo.bar".dup);
assert (fp.isAbsolute);
fp.folder (r"/a/b/c/");
assert (fp.suffix == r".bar");
assert (fp == r"c:/a/b/c/foo.bar");
assert (fp.name == "foo");
assert (fp.folder == r"/a/b/c/");
assert (fp.file == r"foo.bar");
assert (fp.ext == "bar");
assert (fp.isChild);
fp = new FilePath(r"c:/a/b/c/d/e/foo.bar".dup);
assert (fp.isAbsolute);
fp.folder (r"/a/b/c/d/e/f/g/");
assert (fp.suffix == r".bar");
assert (fp == r"c:/a/b/c/d/e/f/g/foo.bar");
assert (fp.name == "foo");
assert (fp.folder == r"/a/b/c/d/e/f/g/");
assert (fp.file == r"foo.bar");
assert (fp.ext == "bar");
assert (fp.isChild);
fp = new FilePath(r"C:/foo/bar/test.bar".dup);
assert (fp.path == "C:/foo/bar/");
fp = new FilePath(r"C:\foo\bar\test.bar".dup);
assert (fp.path == r"C:/foo/bar/");
fp = new FilePath("".dup);
assert (fp.isEmpty);
assert (!fp.isChild);
assert (!fp.isAbsolute);
assert (fp.suffix == r"");
assert (fp == r"");
assert (fp.name == "");
assert (fp.folder == r"");
assert (fp.file == r"");
assert (fp.ext == "");
/+
fp = new FilePath(r"C:/foo/bar/test.bar");
fp = new FilePath(fp.asPath ("foo"));
assert (fp.name == r"test");
assert (fp.folder == r"foo/");
assert (fp.path == r"C:foo/");
assert (fp.ext == ".bar");
fp = new FilePath(fp.asPath (""));
assert (fp.name == r"test");
assert (fp.folder == r"");
assert (fp.path == r"C:");
assert (fp.ext == ".bar");
fp = new FilePath(r"c:/joe/bar");
assert(fp.cat(r"foo/bar/") == r"c:/joe/bar/foo/bar/");
assert(fp.cat(new FilePath(r"foo/bar")).toString == r"c:/joe/bar/foo/bar");
assert (FilePath.join (r"a/b/c/d", r"e/f/" r"g") == r"a/b/c/d/e/f/g");
fp = new FilePath(r"C:/foo/bar/test.bar");
assert (fp.asExt(null) == r"C:/foo/bar/test");
assert (fp.asExt("foo") == r"C:/foo/bar/test.foo");
+/
}
- abstract const immutable(char)[] toString();
- Return the complete text of this filepath.
- inout inout(char)[] cString()();
- Return the complete text of this filepath.
- abstract inout @property inout(char)[] root();
- Return the root of this path. Roots are constructs such as
"C:".
- abstract inout @property inout(char)[] folder();
- Return the file path. Paths may start and end with a "/".
The root path is "/" and an unspecified path is returned as
an empty string. Directory paths may be split such that the
directory name is placed into the 'name' member; directory
paths are treated no differently than file paths.
- abstract inout @property inout(char)[] name();
- Return the name of this file, or directory, excluding a
suffix.
- abstract @property char[] ext();
- Ext is the tail of the filename, rightward of the rightmost
'.' separator e.g. path "foo.bar" has ext "bar". Note that
patterns of adjacent separators are treated specially; for
example, ".." will wind up with no ext at all.
- abstract inout @property inout(char)[] suffix();
- Suffix is like ext, but includes the separator e.g. path
"foo.bar" has suffix ".bar".
- abstract inout @property inout(char)[] path();
- Return the root + folder combination.
- abstract inout @property inout(char)[] file();
- Return the name + suffix combination.
- abstract const @property bool isAbsolute();
- Returns true if this FilePath is *not* relative to the
current working directory.
- abstract const @property bool isEmpty();
- Returns true if this FilePath is empty.
- abstract const @property bool isChild();
- Returns true if this FilePath has a parent.
- abstract inout @property bool exists();
- Does this path currently exist?
- abstract const @property Time modified();
- Returns the time of the last modification. Accurate
to whatever the OS supports.
- abstract const @property Time accessed();
- Returns the time of the last access. Accurate to
whatever the OS supports.
- abstract const @property Time created();
- Returns the time of file creation. Accurate to
whatever the OS supports.
- abstract const @property ulong fileSize();
- Return the file length (in bytes).
- abstract const @property bool isWritable();
- Is this file writable?
- abstract const @property bool isFolder();
- Is this file actually a folder/directory?
- abstract const @property Stamps timeStamps();
- Return timestamp information.