C'è un modo per verificare se un istream è stato aperto in modalità binaria?
-
03-07-2019 - |
Domanda
Sto usando un istream che potrebbe essere stringstream, ifstream o un tipo di flusso definito dall'utente e devo sapere se, nel caso di un ifstream, non è stato aperto in modalità binaria (quindi posso lanciare un'eccezione ). Ho provato il seguente metodo:
if ((_is.flags() & ios::binary) == 0)
throw exception(...)
ma non viene mai generata alcuna eccezione. Il test fallisce in questo caso perché _is.flags () restituisce 0x201 e ios :: binary è 0x20. C'è un modo per scoprire se uno stream è stato aperto in modalità testo?
Soluzione
flags () restituisce ios_base :: fmtflags che sta formattando i flag , mentre binary è una ios_base :: openmode . Non sono sicuro se c'è un modo per scoprirli una volta che lo stream è già aperto. Stavo pensando che forse c'era un membro virtuale della classe streambuf che poteva aiutare, ma non sembra proprio esserci.
Altri suggerimenti
No, non c'è modo di testarlo.