|
Boost Users : |
From: Ovanes Markarian (om_boost_at_[hidden])
Date: 2008-04-15 08:44:49
This is what I was going to mention in my post with . and .. special
directories. With the approach used the infinite loop should happen already
with the first occurence of .-directory, which would recurse in the same
directory and find the first item (.-dir again).
Greetings,
Ovanes
On Tue, Apr 15, 2008 at 2:35 PM, dizzy <dizzy_at_[hidden]> wrote:
> On Tuesday 15 April 2008 14:19:51 Silvio Reis Junior wrote:
> > Hello friends!
>
> Hi
>
> > I'm trying to use directory_iterator but when I try to list recursivelly
> an
> > entire drive or a big directory I get an unhandled exception.
> > I'm trying to figure out if I did something wrong but the code is very
> > similar to the example on the boost web page.
>
> I have used directory_iterator many times for recursive traversals, no
> issues
> so far.
>
> > Here is the code:
> >
> > //-------------------------------------------------------------------
> > VOID CFileSearch::InternalSearch( path RootDir )
> > {
> > directory_iterator EndDirItr;
> > for ( directory_iterator DirItr( RootDir ); DirItr != EndDirItr;
> > ++DirItr )
> > {
> > if ( is_regular( DirItr->status() ) )
> > {
> > _tprintf( "FILE: %s\n", DirItr->path().string().c_str() );
> > }
> > else if ( is_directory( DirItr->status() ) )
> > {
> > _tprintf( "DIR : %s\n", DirItr->path().string().c_str() );
> > InternalSearch( DirItr->path() );
> > }
> > }
> > }
>
> So you have a recursive algorithm. One thing that comes straight into my
> mind
> (especially for big structures) is the depth of the calls. Try to rewrite
> it
> iteratively and see if it still happens. Also, not sure on Windows (which
> you
> seem to be using) but on POSIX doing that is surely a problem because
> directory_iterator does follow symbolik links and thus one can easily
> create
> an infinite depth loop.
>
> I also sugest that if your intentation is to recurse then just use
> recursive_directory_iterator directly (still pay attention to symlinks,
> call .no_push() on them so recursive_directory_iterator does not follow
> them
> through).
>
> --
> Mihai RUSU Email: dizzy_at_[hidden]
> "Linux is obsolete" -- AST
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
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