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:"); }