+namespace FS {
+
+string basename(const Path &p)
+{
+ return p[-1];
+}
+
+Path dirname(const Path &p)
+{
+ if(p.size()==1)
+ {
+ if(p.is_absolute())
+ return p;
+ return ".";
+ }
+ return p.subpath(0, p.size()-1);
+}
+
+string basepart(const string &fn)
+{
+ unsigned dot=fn.rfind('.');
+ return fn.substr(0, dot);
+}
+
+string extpart(const string &fn)
+{
+ string::size_type dot=fn.rfind('.');
+ if(dot==string::npos)
+ return string();
+ return fn.substr(dot);
+}