私は、Windowsを呼び出すことからboost :: filesystemを使用するように切り替えることを検討しています。しかし、実際には、意味のあるエラー情報をどのように取得するかについては、何も書かれていません。簡単な例についてはboost :: filesystem :: filesystem_errorからエラーコードの意味を取得する方法
、私は)(以下
try
{
// Creates all directories in the path if they do not exist
boost::filesystem::create_directories("!?#Gibberish!?#");
}
catch(boost::filesystem::filesystem_error & e)
{
// Not very clear on how to get meaningful information from the exception
// The codes are found in boost::system::errc::<your code here>
// Try and get the value and then find the Windows codes mapped to the boost codes?
// The actual numeric value can be found in the header with the Windows codes - errno.h under _CRT_NO_POSIX_ERROR_CODES?
//
// You'll have to compare against specific ones and make your own meaningful error message?
const boost::system::error_code errorCode = e.code();
std::ostringstream msg;
msg << "boost::filesystem::create_directories failed with error code: " << errorCode.message();
// Use our own exception type
throw Common::Exception(__FILE__, __LINE__, msg.str());
}
e.codeをした私のデバッガで123の値を与えます。 Windowsヘッダーで123を参照すると、ENOPROTOOPTのネイティブエラーとno_protocol_optionのブーストエラーが表示されます。それは正しいことではありません。
メッセージがしかし、私は常に記入されているメッセージに頼るか、感覚を作るべきであることを確認していない、やや有用であり、「ファイル名、ディレクトリ名、またはボリュームラベルの構文が正しくありません」と言います。このケースではもっとうまくいくかもしれませんし、switch文+手動メッセージが適切だと思われます。
ブースト::ファイルシステムのうち、意味のあるエラー情報を取得するための適切な方法は何ですか?意味があるのは、文字列メッセージと、ルックアップと比較可能なエラーコードの両方です。
編集: native_error()という古いフォーラムスレッドと記事がありますが、デバッガのバージョン1.62の例外ではこのようなメソッドが公開されていないようです。私が見つけた
関連リンク:quotetとして
//
// MessageId: ERROR_INVALID_NAME
//
// MessageText:
//
// The filename, directory name, or volume label syntax is incorrect.
//
#define ERROR_INVALID_NAME 123L // dderror
使用errorCode.message();
、あなたは常に人間が読めるエラーの説明を取得します: http://www.boost.org/doc/libs/1_62_0/libs/filesystem/doc/reference.html#Error-reporting
catching exception from boost::filesystem::is_directory
[ブーストエラーコード人間が判読可能な説明](0120-338-501)を参照してください。 – Arunmu