123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- // error_demo.cpp --------------------------------------------------------------------//
- // Copyright Beman Dawes 2009
- // Distributed under the Boost Software License, Version 1.0.
- // See http://www.boost.org/LICENSE_1_0.txt
- // Library home page: http://www.boost.org/libs/filesystem
- //--------------------------------------------------------------------------------------//
- // //
- // The purpose of this program is to demonstrate how error reporting works. //
- // //
- //--------------------------------------------------------------------------------------//
- #include <boost/filesystem.hpp>
- #include <boost/system/system_error.hpp>
- #include <iostream>
- using std::cout;
- using boost::filesystem::path;
- using boost::filesystem::filesystem_error;
- using boost::system::error_code;
- using boost::system::system_error;
- namespace fs = boost::filesystem;
- namespace
- {
- void report_system_error(const system_error& ex)
- {
- cout << " threw system_error:\n"
- << " ex.code().value() is " << ex.code().value() << '\n'
- << " ex.code().category().name() is " << ex.code().category().name() << '\n'
- << " ex.what() is " << ex.what() << '\n'
- ;
- }
- void report_filesystem_error(const system_error& ex)
- {
- cout << " threw filesystem_error exception:\n"
- << " ex.code().value() is " << ex.code().value() << '\n'
- << " ex.code().category().name() is " << ex.code().category().name() << '\n'
- << " ex.what() is " << ex.what() << '\n'
- ;
- }
- void report_status(fs::file_status s)
- {
- cout << " file_status::type() is ";
- switch (s.type())
- {
- case fs::status_error:
- cout << "status_error\n"; break;
- case fs::file_not_found:
- cout << "file_not_found\n"; break;
- case fs::regular_file:
- cout << "regular_file\n"; break;
- case fs::directory_file:
- cout << "directory_file\n"; break;
- case fs::symlink_file:
- cout << "symlink_file\n"; break;
- case fs::block_file:
- cout << "block_file\n"; break;
- case fs::character_file:
- cout << "character_file\n"; break;
- case fs::fifo_file:
- cout << "fifo_file\n"; break;
- case fs::socket_file:
- cout << "socket_file\n"; break;
- case fs::type_unknown:
- cout << "type_unknown\n"; break;
- default:
- cout << "not a valid enumeration constant\n";
- }
- }
- void report_error_code(const error_code& ec)
- {
- cout << " ec:\n"
- << " value() is " << ec.value() << '\n'
- << " category().name() is " << ec.category().name() << '\n'
- << " message() is " << ec.message() << '\n'
- ;
- }
- bool threw_exception;
- }
- int main(int argc, char* argv[])
- {
- if (argc < 2)
- {
- cout << "Usage: error_demo path\n";
- return 1;
- }
- error_code ec;
- //// construct path - no error_code
- //try { path p1(argv[1]); }
- //catch (const system_error& ex)
- //{
- // cout << "construct path without error_code";
- // report_system_error(ex);
- //}
- //// construct path - with error_code
- path p (argv[1]);
- fs::file_status s;
- bool b (false);
- fs::directory_iterator di;
- // get status - no error_code
- cout << "\nstatus(\"" << p.string() << "\");\n";
- threw_exception = false;
- try { s = fs::status(p); }
- catch (const system_error& ex)
- {
- report_filesystem_error(ex);
- threw_exception = true;
- }
- if (!threw_exception)
- cout << " Did not throw exception\n";
- report_status(s);
- // get status - with error_code
- cout << "\nstatus(\"" << p.string() << "\", ec);\n";
- s = fs::status(p, ec);
- report_status(s);
- report_error_code(ec);
- // query existence - no error_code
- cout << "\nexists(\"" << p.string() << "\");\n";
- threw_exception = false;
- try { b = fs::exists(p); }
- catch (const system_error& ex)
- {
- report_filesystem_error(ex);
- threw_exception = true;
- }
- if (!threw_exception)
- {
- cout << " Did not throw exception\n"
- << " Returns: " << (b ? "true" : "false") << '\n';
- }
- // query existence - with error_code
- // directory_iterator - no error_code
- cout << "\ndirectory_iterator(\"" << p.string() << "\");\n";
- threw_exception = false;
- try { di = fs::directory_iterator(p); }
- catch (const system_error& ex)
- {
- report_filesystem_error(ex);
- threw_exception = true;
- }
- if (!threw_exception)
- {
- cout << " Did not throw exception\n"
- << (di == fs::directory_iterator() ? " Equal" : " Not equal")
- << " to the end iterator\n";
- }
- // directory_iterator - with error_code
- cout << "\ndirectory_iterator(\"" << p.string() << "\", ec);\n";
- di = fs::directory_iterator(p, ec);
- cout << (di == fs::directory_iterator() ? " Equal" : " Not equal")
- << " to the end iterator\n";
- report_error_code(ec);
- return 0;
- }
|