|
Boost : |
From: Glen Knowles (gknowles_at_[hidden])
Date: 2002-11-25 21:14:11
I'm dealing with filesystem paths and urls and the way we ended up
implementing it is with the following functions (we are not currently using
boost::filesystem, these are from an internal library):
current_directory() - returns the current directory (and drive if windows)
make_absolute() - prepends current drive if no drive is defined, inserts
current directory after the drive if it is not an absolute path
is_absolute() - true if the directory (sans drive) starts with a / (c:/, /,
/blah are absolute; c:blah, blah, ../blah are not)
resolve(base, rel) - returns a path that is 'rel' resolved relative to
'base' according to the following table:
base rel result
-----------------------------
base rel base/rel
base /rel /rel
base c:rel ... throws exception
base c:/rel c:/rel
/base rel /base/rel
/base /rel /rel
/base c:rel ... throws exception
/base c:/rel c:/rel
c:base rel c:base/rel
c:base /rel c:/rel
c:base c:rel c:base/rel
c:base c:/rel c:/rel
c:base a:rel ... throws exception
c:base a:/rel a:/rel
c:/base rel c:/base/rel
c:/base /rel c:/rel
c:/base c:rel c:/base/rel
c:/base c:/rel c:/rel
c:/base a:rel ... throws exception
c:/base a:/rel a:/rel
This attempts to follow the same phliosophy as the url resolution rules and
has worked out well so far. During the review I argued for make_absolute to
behave like resolve(current_directory(), rel) but now I believe that two
separate functions is the best way to do this.
Just wanted to get this off before it was too late,
Glen
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk