Ich erwäge den Wechsel von Windows auf boost :: filesystem zu verwenden. Die Dokumentation sagt mir jedoch fast gar nichts darüber, wie man aussagekräftige Fehlerinformationen daraus erhält.Wie bekomme ich die Bedeutung von Fehlercodes von boost :: filesystem :: filesystem_error
Für ein schnelles Beispiel habe ich die folgende
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() gibt mir einen Wert von 123 im Debugger. Wenn ich 123 in der Windows-Kopfzeile nachschlagen, zeigt es mich auf den systemeigenen Fehler von ENOPROTOOPT und den Boost-Fehler von no_protocol_option. Das kann nicht stimmen.
Die Nachricht ist etwas nützlich und sagt: "Der Dateiname, Verzeichnisname oder Volume-Label-Syntax ist falsch" Allerdings bin ich nicht sicher, sollte ich darauf verlassen, dass die Nachricht immer ausgefüllt oder sinnvoll. Es könnte viel besser für diesen Fall sein und eine Switch-Anweisung + manuelle Nachricht scheint angemessen.
Was ist der richtige Weg, um sinnvolle Fehlerinformationen aus boost :: filesystem zu erhalten? Sinnvoll sind sowohl String-Nachrichten als auch Fehlercodes, die nachgeschlagen und verglichen werden können.
Edit: Ich habe auch einige ältere Forum-Themen und Artikel gefunden, die native_error() erwähnen, aber die Ausnahme in Version 1.62, in meinem Debugger, scheint keine solche Methode ausgesetzt zu haben.
Relevante Links gefunden: http://www.boost.org/doc/libs/1_62_0/libs/filesystem/doc/reference.html#Error-reporting
catching exception from boost::filesystem::is_directory
Mögliche Duplikate von [Boost Fehlercodes lesbare Beschreibung] (http://stackoverflow.com/questions/10755084/boost-error-codes-human-readable-description) – Arunmu