|
Boost : |
From: Jeff Garland (jeff_at_[hidden])
Date: 2005-03-31 06:46:12
On Wed, 30 Mar 2005 15:16:07 -0500, Beman Dawes wrote
> "Martin" <adrianm_at_[hidden]> wrote in message
Couple thoughts below....
> > I also had hopes for some new things that didn't appear in the new
> > implementation.
> > - non-throwing is_* functions. I find it very inconvenient and error prune
> > to
> > put try/catch around each is_directory call. Calling is_accessible before
> > every other is_* function is an option but not much easier and still
> > leaves a
> > risk for an exception if another process is accessing the file.
>
> If the is_* functions return false, rather than throwing, then
> testing for the negative of a is_* function becomes unreliable. Does
> !is_directory( "foo" ) mean that "foo" is a file, or is is just
> missing? The programmer would have to write exists("foo") &&
> is_accessible("foo") && !is_directory("foo").
Why not:
enum exists_check { CHECK, NO_CHECK };
bool is_directory( path p, exists_check = CHECK);
Always returns false if directory doesn't exist...
> That could be
> simplified by providing an is_file() function (as suggested by Jeff
> Garland recently), but then we have to define exactly what a file
> is. Is a socket a file? Is a device a file? Or what POSIX calls a
> "regular file"? How does that translate to Windows?
I think I already said this, but just to be sure:
> Is a socket a file?
No
>Is a device a file?
No
> Or what POSIX calls a "regular file"?
Yes
>How does that translate to Windows?
Since there are no simlinks is_file() == !is_directory().
> > - Why doesn't last_write_time return a boost::ptime
>
> That was a concious decision to limit coupling. That is, to avoid
> Boost libraries which are not part of TR1. I'd like the Boost
> version to be identical to what gets proposed to the standards
> committee, and unless Boost Date-Time gets proposed and accepted,
> that means it can't be used.
This can be trivially implemented in convenience functions since date-time has
added a from_time_t function for posix_time. Basically you just need a thin
veneer over the current functions:
#include "boost/date_time/posix_time/conversion.hpp"
//sorry can't think of a good function name....
inline
boost::posix_time::ptime
last_write_time_as_ptime( const path & ph )
{
using boost::posix_time;
return from_time_t(last_write_time( const path & ph ));
}
I'm not suggesting Beman add this to filesystem core -- just pointing out that
it can be done trivially with an add-on.
Jeff
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk