Извините за странный заголовок. Ограничено до 150 символов, поэтому нельзя использовать правильные предложения.В C++ std :: streams, после сбоя, как получить причину сбоя? Обязательно: threadsafe и общий для Windows и Linux (или, по крайней мере, Msvc/Gcc)
Так скажем, я сделал следующее, чтобы узнать, что что-то пошло не так с моим потоком файла:
std::ofstream ofs;
do_stuff_with(ofs);
// streams don't throw on error because C++ [edit: we can make them do so, but the .what()s aren't very user-friendly]
// so we have to check for failure manually
if(!ofs){
auto fail_code = errno; // threadsafe on Win/Linux
// but what goes here?
}
1) strerror: Не потокобезопасны
2) strerror_s: Не в НКУ ? Или это?
3) strerror_r: Не в Msvc? Или это?
4) # IFDEF/# определить/и т.д.: Тьфу, но может быть единственным выбором
я сделал некоторые поиски, но я не найти «это, безусловно, работать в разумный еще немного от платформы зависимый путь "ответ ... Тем не менее, я чувствую, что это« очевидно, дублирующий вопрос », но я не могу найти оригинал ...
Вы можете сделать поток бросить по ошибке, если хотите. – Holt
Ближайший, который вы можете получить в C++, это ['std :: io_errc'] (http://en.cppreference.com/w/cpp/io/io_errc) –
[" '// потоки не выбрасывают ошибку, потому что C++ '"] (http://en.cppreference.com/w/cpp/io/basic_ios/exceptions). Не то, чтобы это гарантировало наличие полезного 'what()'. – BoBTFish