add try...catch to both DFS and BFS
This commit is contained in:
liuluheng
2016-03-24 12:43:13 +08:00
parent 75502b81b1
commit 6d0e71e68d

View File

@@ -72,12 +72,18 @@ const std::string ChildrenFirstTraverse::next(Stack* itStack, bool* isFinished)
bool isDepthLimitReached = isFiniteDepth() && _depthDeterminer(*itStack) >= _maxDepth; bool isDepthLimitReached = isFiniteDepth() && _depthDeterminer(*itStack) >= _maxDepth;
if (!isDepthLimitReached && isDirectory(*itStack->top())) if (!isDepthLimitReached && isDirectory(*itStack->top()))
{ {
DirectoryIterator child_it(itStack->top().path()); // check the dir is iterable
// check if directory is empty try
if (child_it != _itEnd) {
DirectoryIterator child_it(itStack->top().path());
// check if directory is empty
if (child_it != _itEnd)
{
itStack->push(child_it);
return child_it->path();
}
catch (...)
{ {
itStack->push(child_it);
return child_it->path();
} }
} }
@@ -140,7 +146,17 @@ const std::string SiblingsFirstTraverse::next(Stack* itStack, bool* isFinished)
{ {
std::string dir = _dirsStack.top().front(); std::string dir = _dirsStack.top().front();
_dirsStack.top().pop(); _dirsStack.top().pop();
DirectoryIterator child_it(dir); DirectoryIterator child_it;
// check the dir is iterable
try
{
child_it = dir;
}
catch (...)
{
continue;
}
// check if directory is empty // check if directory is empty
if (child_it != _itEnd) if (child_it != _itEnd)