
OK, this is the easiest example which produces the "access is denied"
error, I can come up with:
int main() {
fs::recursive_directory_iterator it_end;
fs::recursive_directory_iterator it_dir("e:\\");
for ( ; it_dir != it_end; ++it_dir ) {
//something here
}
}
Can someone tell me any solution which would catch a "access is denied"
kind of error _inside_ the for loop? For every other error it works if
I just do a try-catch _inside_ the for loop, but a not accessible
directory produces error outside the loop?
Or if it's not possible to catch the error inside, how could I start
the for cycle again after it has been caught?
Zsolt
On Tue, Nov 23, 2010 at 12:48 PM, Zsolt Ero
OK, I figured out my way, it seems that I could solve most of the problems. My big problem now is that the recursive_directory_iterator goes through a file which has a really long name. I think it's more than 256 characters. It says:
boost::filesystem::last_write_time: The system cannot find the path specified:
Is there a fix or something for boost to handle more than 256 characters in windows path? I am using MSVC2010 + latest Boostpro installer.
Zsolt
p.s. so far here is my code. If you have any idea about what I am doing wrong, please don't hesitate to comment:
#define BOOST_FILESYSTEM_VERSION 3
#include "boost/filesystem.hpp" #include <iostream> #include <ctime>
using namespace std; namespace fs = boost::filesystem;
int main() { fs::recursive_directory_iterator it_end; fs::recursive_directory_iterator it_dir("e:\\"); fs::path p;
time_t oldest( time(NULL) ); time_t newest(0);
try { for ( ; it_dir != it_end; ++it_dir ) { p = *it_dir; try { time_t t( last_write_time(p) ); if (t
newest) newest=t; //if (fs::is_directory(p)) cout << (p) << " " << t << endl; } catch (const fs::filesystem_error& ex) { cout << "\n" << ex.what() << "\n"; } } }
catch (const fs::filesystem_error& ex) { cout << "\n" << ex.what() << "\n"; }
cout << "\nOldest: " << ctime(&oldest); cout << "Newest: " << ctime(&newest) << endl;
return 0; }