Il seguente codice deve copiare i dati da una wifstream a wcout. Dopo che il contenuto è stato copiato, il programma genera un'eccezione ios :: failure.Perché std :: copy (da istream a ostream) solleva un'eccezione ios :: failure?
#include <string>
#include <iostream>
#include <sstream>
#include <fstream>
#include <locale>
#include <iterator>
#include <algorithm>
int main(void)
{
std::locale::global(std::locale(""));
std::wifstream is;
is.exceptions(std::ios::failbit | std::ios::badbit);
is.open("test.ts", std::ios::binary);
is >> std::noskipws;
std::istream_iterator<wchar_t, wchar_t> in(is);
std::istream_iterator<wchar_t, wchar_t> end;
std::copy(in, end,
std::ostream_iterator<wchar_t, wchar_t>(std::wcout));
return 0;
}
Lo streaming deve generare solo un'eccezione (vedere maschera di eccezione) se qualcosa va male, ma non su EOF.
eccezioni impostazione del flusso sembra una buona idea, ma spesso non funziona come previsto. Invece, controlla lo stato del flusso prima di utilizzare l'input, ad es. 'if (stream >> var) {/ * solo ora usa var * /}'. –