if (exists ("some/file/path"))
...
import Path = tango.io.Path;
if (Path.exists ("some/file/path"))
...
auto p = Path.parse ("some/file/path");
auto path = p.path;
auto name = p.name;
auto suffix = p.suffix;
...
remove (collate (".", "*.d", true));
foreach (info; children("myfolder"))
...
char[] path char[] name ulong bytes bool folder
auto p = parse ("/foo/bar/file.ext".dup);
assert (p.equals("/foo/bar/file.ext"));
assert (p.folder == "/foo/bar/");
assert (p.path == "/foo/bar/");
assert (p.file == "file.ext");
assert (p.name == "file");
assert (p.suffix == ".ext");
assert (p.ext == "ext");
assert (p.isChild == true);
assert (p.isEmpty == false);
assert (p.isAbsolute == true);
| * | Matches 0 or more instances of any character. |
| ? | Matches exactly one instances of any character. |
| [] | Matches one instance of any character that appears between the brackets. |
| [!] | Matches one instance of any character that does not appear between the brackets after the exclamation mark. |
version (Win32)
{
patternMatch("foo.bar", "*"); // => true
patternMatch(r"foo/foo\bar", "f*b*r"); // => true
patternMatch("foo.bar", "f?bar"); // => false
patternMatch("Goo.bar", "[fg]???bar"); // => true
patternMatch(r"d:\foo\bar", "d*foo?bar"); // => true
}
version (Posix)
{
patternMatch("Go*.bar", "[fg]???bar"); // => false
patternMatch("/foo*home/bar", "?foo*bar"); // => true
patternMatch("foobar", "foo?bar"); // => true
}
version (Win32)
assert(patternMatch("foo", "Foo"));
version (Posix)
assert(!patternMatch("foo", "Foo"));
assert(patternMatch("foo", "*"));
assert(patternMatch("foo.bar", "*"));
assert(patternMatch("foo.bar", "*.*"));
assert(patternMatch("foo.bar", "foo*"));
assert(patternMatch("foo.bar", "f*bar"));
assert(patternMatch("foo.bar", "f*b*r"));
assert(patternMatch("foo.bar", "f???bar"));
assert(patternMatch("foo.bar", "[fg]???bar"));
assert(patternMatch("foo.bar", "[!gh]*bar"));
assert(!patternMatch("foo", "bar"));
assert(!patternMatch("foo", "*.*"));
assert(!patternMatch("foo.bar", "f*baz"));
assert(!patternMatch("foo.bar", "f*b*x"));
assert(!patternMatch("foo.bar", "[gh]???bar"));
assert(!patternMatch("foo.bar", "[!fg]*bar"));
assert(!patternMatch("foo.bar", "[fg]???baz"));
normalize("/home/foo/./bar/../../john/doe"); // => "/home/john/doe"
assert (normalize ("") == "");
assert (normalize ("/home/../john/../.tango/.htaccess") == "/.tango/.htaccess");
assert (normalize ("/home/../john/../.tango/foo.conf") == "/.tango/foo.conf");
assert (normalize ("/home/john/.tango/foo.conf") == "/home/john/.tango/foo.conf");
assert (normalize ("/foo/bar/.htaccess") == "/foo/bar/.htaccess");
assert (normalize ("foo/bar/././.") == "foo/bar/");
assert (normalize ("././foo/././././bar") == "foo/bar");
assert (normalize ("/foo/../john") == "/john");
assert (normalize ("foo/../john") == "john");
assert (normalize ("foo/bar/..") == "foo/");
assert (normalize ("foo/bar/../john") == "foo/john");
assert (normalize ("foo/bar/doe/../../john") == "foo/john");
assert (normalize ("foo/bar/doe/../../john/../bar") == "foo/bar");
assert (normalize ("./foo/bar/doe") == "foo/bar/doe");
assert (normalize ("./foo/bar/doe/../../john/../bar") == "foo/bar");
assert (normalize ("./foo/bar/../../john/../bar") == "bar");
assert (normalize ("foo/bar/./doe/../../john") == "foo/john");
assert (normalize ("../../foo/bar") == "../../foo/bar");
assert (normalize ("../../../foo/bar") == "../../../foo/bar");
assert (normalize ("d/") == "d/");
assert (normalize ("/home/john/./foo/bar.txt") == "/home/john/foo/bar.txt");
assert (normalize ("/home//john") == "/home/john");
assert (normalize("/../../bar/") == "/bar/");
assert (normalize("/../../bar/../baz/./") == "/baz/");
assert (normalize("/../../bar/boo/../baz/.bar/.") == "/bar/baz/.bar/");
assert (normalize("../..///.///bar/..//..//baz/.//boo/..") == "../../../baz/");
assert (normalize("./bar/./..boo/./..bar././/") == "bar/..boo/..bar./");
assert (normalize("/bar/..") == "/");
assert (normalize("bar/") == "bar/");
assert (normalize(".../") == ".../");
assert (normalize("///../foo") == "/foo");
assert (normalize("./foo") == "foo");
auto buf = new char[100];
auto ret = normalize("foo/bar/./baz", buf);
assert (ret.ptr == buf.ptr);
assert (ret == "foo/bar/baz");
version (Windows)
{
assert (normalize ("\\foo\\..\\john") == "/john");
assert (normalize ("foo\\..\\john") == "john");
assert (normalize ("foo\\bar\\..") == "foo/");
assert (normalize ("foo\\bar\\..\\john") == "foo/john");
assert (normalize ("foo\\bar\\doe\\..\\..\\john") == "foo/john");
assert (normalize ("foo\\bar\\doe\\..\\..\\john\\..\\bar") == "foo/bar");
assert (normalize (".\\foo\\bar\\doe") == "foo/bar/doe");
assert (normalize (".\\foo\\bar\\doe\\..\\..\\john\\..\\bar") == "foo/bar");
assert (normalize (".\\foo\\bar\\..\\..\\john\\..\\bar") == "bar");
assert (normalize ("foo\\bar\\.\\doe\\..\\..\\john") == "foo/john");
assert (normalize ("..\\..\\foo\\bar") == "../../foo/bar");
assert (normalize ("..\\..\\..\\foo\\bar") == "../../../foo/bar");
assert (normalize(r"C:") == "C:");
assert (normalize(r"C") == "C");
assert (normalize(r"c:\") == "C:/");
assert (normalize(r"C:\..\.\..\..\") == "C:/");
assert (normalize(r"c:..\.\boo\") == "C:../boo/");
assert (normalize(r"C:..\..\boo\foo\..\.\..\..\bar") == "C:../../../bar");
assert (normalize(r"C:boo\..") == "C:");
}