-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Description
From http://pocoproject.org/forum/viewtopic.php?f=10&t=5928
postby gurami1 » Mon Jul 08, 2013 3:46 pm
Bug in RecursiveDirectoryIterator and SortedDirectoryIterator (the “++ ()” operator throws and there are no way to advance )
Platform: Windows 7 64bit
Poco version : 1.5.2
Here is simple test:
//Poco::SortedDirectoryIterator dirIterator(p);
//Poco::SortedDirectoryIterator end;
//Poco::SimpleRecursiveDirectoryIterator dirIterator(p);
//Poco::SimpleRecursiveDirectoryIterator end;
Poco::Path p ("c:\\");
Poco::SiblingsFirstRecursiveDirectoryIterator dirIterator(p);
Poco::SiblingsFirstRecursiveDirectoryIterator end;
while (dirIterator != end)
{
try
{
std::cout << dirIterator->path() << std::endl;
++dirIterator;
}
catch (Poco::FileException &exc)
{
std::cout << exc.displayText() << std::endl;
break;
}
}The “++dirIterator“ throws “File access error: sharing violation: c:\hiberfil.sys” for c:\hiberfil.sys file.
Here is stack:
PocoFoundation64d.dll!Poco::FileImpl::isDirectoryImpl() Line 185 C++
PocoFoundation64d.dll!Poco::File::isDirectory() Line 160 C++
PocoFoundation64d.dll!Poco::SiblingsFirstTraverse::next(std::stackPoco::DirectoryIterator,std::deque<Poco::DirectoryIterator,std::allocator<Poco::DirectoryIterator > > * itStack, bool * isFinished) Line 133 C++
FoundationUT.exe!Poco::RecursiveDirectoryIteratorImplPoco::SiblingsFirstTraverse::next() Line 107 C++
FoundationUT.exe!Poco::RecursiveDirectoryIteratorPoco::SiblingsFirstTraverse::operator++() Line 208 C++
Poco::DirectoryIterator class works because implementation of ++ () operator doesn’t call IsDirectory().