2011-07-14 8 views
7

Aktualnie łapię błędy z boost :: filesystem :: is_directory i pokazuję błąd użytkownikowi, wywołując "what()" na wyjątku. Daje to przyczynę niepowodzenia, ale błąd jest dziwny dla użytkownika. Na przykład:Wyłapywanie wyjątku z boost :: filesystem :: is_directory

boost :: plików :: is_directory: Odmowa dostępu

Jak mogę złapać błąd doładowania i dowiedzieć się, co jest rzeczywistą przyczyną, więc mogę pokazać ładniejszy komunikat o błędzie ?

+1

Boost.FileSystem są realizowane w kategoriach [Boost.System] (http://www.boost.org/doc/libs/ release/libs/system/doc/index.html) - czy czytasz jej dokumenty? – ildjarn

Odpowiedz

15

Przez „ładniejszy komunikatem o błędzie” byś myśli coś wyjątkami

#include <iostream> 
#include <boost/filesystem.hpp> 
int main() 
{ 
    boost::filesystem::path p("/proc/1/fd/1"); 
    try { 
     boost::filesystem::is_directory(p); 
    } catch(const boost::filesystem::filesystem_error& e) 
    { 
     if(e.code() == boost::system::errc::permission_denied) 
      std::cout << "Search permission is denied for one of the directories " 
        << "in the path prefix of " << p << "\n"; 
     else 
      std::cout << "is_directory(" << p << ") failed with " 
        << e.code().message() << '\n'; 
    } 
} 
+0

Tak, to byłby bardzo ładny komunikat o błędzie. – Warpin

+2

Uwaga: być może będziesz musiał złapać boost :: filesystem :: wfilesystem_error jest podaną ścieżką, która używała wchar_t * – Warpin

Powiązane problemy