Boost logo

Boost Users :

From: Ben Hutchings (ben.hutchings_at_[hidden])
Date: 2005-02-21 11:16:06


me22 wrote:
> On Sun, 20 Feb 2005 11:28:23 +0100, Matthias Kaeppler
> <nospam_at_[hidden]> wrote:
>
>>I wonder if there is any means of telling
>>boost::filesystem::directory_iterator to skip broken symlinks. It's sort
>>of an annoyance working with them, since operations like is_directory
>>will throw when invoked on a broken symlink.
>>I am keeping a vector of boost::filesystem::pathS, and as soon as I
>>operate on a broken symlink, an exception will be thrown. I do catch it,
>>but that doesn't really help since the program will return from the
>>method where the exception was thrown. I would find it much more
>>convenient to simply skip these broken files, instead of jumping out of
>>the procedure (IMO it's not even exceptional behavior, dead symlinks are
>>pretty common).
>
>
> http://boost.org/libs/filesystem/doc/operations.htm#symbolic_link_exists says:
> * ph not present: !exists(ph) && !symbolic_link_exists(ph)
> * ph present and is not a symbolic link: exists(ph) &&
> !symbolic_link_exists(ph)
> * ph present and is a symbolic link to a non-existent file or
> directory: !exists(ph) && symbolic_link_exists(ph)
> * ph present and is a symbolic link to an existing file or
> directory: exists(ph) && symbolic_link_exists(ph)
>
> Or, less elegantly, you could always catch the exception in the procedure.

Since the filesystem is normally shared with other processes which may
change it at any time, you should be prepared for file operations to
fail even if you check in advance that they should work. So checking in
advance cannot substitute for exception-handling; it's extra programming
effort and may actually be slower than handling the occasional exception.

Ben.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net