boost::filesystem - uprawnienia do plików / folderów

0

w funkcji przeszukującej dysk program wywala się na folderach systemowych ( mimo że jestem na koncie administratora ) np system volume information, znalazłem w sieci metodę na ominięcie tego problemu mianowicie no_push() ::

You should call no_push() before moving to the next iterator.
Pseudo code:
if( it is a directory that I want to skip) it.no_push(); ++it;

i teraz w pętli chciałem sprawdzać uprawnienia do każdego folderu i w razie braku uprawnień wywołać no_push(), ++it.

W dokumentacji boost znalazłem klasę file_status która ma metody type() - zwraca typ pliku np regular_file i metodę permissions() która zwraca uprawnienia do pliku ale to co zwraca w moim przypadku jest kompletnie bez sensu ponieważ na wyjściu dostaje 438...

jakieś sugestie? ewentualnie inna możliwość iteracji po katalogach z omijaniem tych problematycznych

0

udało mi się pośrednio rozwiązać problem tak ::

try {
     ++it;
}   catch( const boost::filesystem::filesystem_error & e ) { 
            std::cout<< e.what() <<std::endl;
            it.no_push();                
try {
     ++it;
}   catch( ... ) {
            std::cout<< "exception boost::filesystem:: " <<std::endl;
            return;
     }            
     }

teraz pytanie czy można wykonać bezpiecznie obsługę tego konkretnego wyjątku w pętli? bo w tej chwili jeżeli podczas iteracji trafie na 2 "problematyczne" foldery pod rząd to kod się wysypie przydałoby się coś na kształt tego :: ( pseudokod )

try {
     ++it;
}   
while( /* łapie wyjątek boost::filesystem  */ )  ) { 
            std::cout<< e.what() <<std::endl;
            it.no_push();
    try {
         ++it;
    }
}

edit :: problem rozwiązany wystarczyło coś takiego

catch( const boost::filesystem::filesystem_error & e ) {
                it.no_push();
                continue;
}

przepraszam za zamieszanie ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1