Sto utilizzando l'iteratore boost "recursive_directory_iterator" per eseguire la scansione in modo ricorsivo attraverso una directory. Tuttavia, quando l'iteratore viene eseguito in una directory per cui la mia applicazione non ha accesso, viene lanciata un'eccezione di tipo "boost :: filesystem3 :: filesystem_error", che interrompe l'iteratore e il programma si interrompe. È comunque possibile istruire l'iteratore per ignorare tali directory.recursive_directory_iterator genera l'eccezione
Ho provato il codice suggerito allo Traversing a directory with boost::filesystem without throwing exceptions Tuttavia, non ha funzionato né funzionato per me. Sto usando la versione 1.49 di spinta.
Il mio codice dopo aver seguito il suggerimento (il meglio che potevo venire con), si presenta come segue:
void scand()
{
boost::system::error_code ec, no_err;
// Read dir contents recurs
for (recursive_directory_iterator end, _path("/tmp", ec);
_path != end; _path.increment(ec)) {
if (ec != no_err) {
_path.pop();
continue;
}
cout << _path->path() << endl;
}
}
Grazie, Ahmed.
Ho aggiornato la parte di incremento del ciclo for, e ora ho un errore diverso: ***** Errore programma interno - assertion (m_level> 0) non riuscito in void boost :: filesystem3 :: dettaglio :: recur_dir_itr_imp :: pop(): /usr/include/boost/filesystem/v3/operations.hpp(818): pop() su recursive_directory_iterato r con livello <1 abortito –
Apparentemente questo è un noto (ancora da risolvere) bug: https://svn.boost.org/trac/boost/ticket/4494 –
Ho lo stesso problema. Ancora non è stato risolto nell'aprile 2015? –