Ogni chiamata di sistema che non riesce aggiornare il valore errno
.
Quindi, si può avere più informazioni su ciò che accade quando un aperto ifstream
fallisce usando qualcosa come:
cerr << "Error: " << strerror(errno);
Tuttavia, dal momento che ogni chiamata di sistema aggiorna il valore globale errno
, è potrebbe avere problemi in un'applicazione multithread, se un'altra chiamata di sistema attiva un errore tra l'esecuzione di f.open
e l'uso di errno
.
On sistema con standard POSIX:
errno è thread-locale; impostandolo in un thread non influisce sul suo valore in nessun altro thread.
Modifica (grazie a Arne Mertz e altre persone nei commenti):
e.what()
sembravano in un primo momento ad essere un altro C++ - idiomaticamente modo corretto di attuazione del presente, ma la stringa restituita questa funzione è dipendente dall'implementazione e (almeno nel libstdC++ di G ++) questa stringa non ha informazioni utili sul motivo dell'errore ...
fonte
2013-06-27 09:02:15
possibile duplicato di [C++ ifstream Error Checking] (http://stackoverflow.com/questions/13446593/c-ifstream-error-checking) –
possibile duplicato di [È possibile ottenere una condizione di errore specifica quando si apre un flusso C++ fallisce?] (http://stackoverflow.com/questions/303966/can-you-get-a-specific-error-condition-when-ac-stream-open-fails) – arne
@Alex Farber: sicuro. 'cerr <<" Codice errore: "<< strerror (errno); // Ottieni informazioni sul motivo per cui sembra pertinente alla domanda. –