in file C ++: che un file aperto come un ios :: differisce binari da un aperto come ios :: binary | ios :: out?

StackOverflow https://stackoverflow.com/questions/2231138

  •  19-09-2019
  •  | 
  •  

Domanda

se ho aperto un file del tipo:

ofstream file("file.dat",ios::binary);

o

ofstream file("file.dat",ios::binary | ios::out);

cosa posso fare con un file aperto in quest'ultima forma che non posso fare con la prima forma e viceversa

grazie

È stato utile?

Soluzione 4

grazie per tutte le persone che mi hanno risposto: Ora provato diversi codici a seconda di ciò che mi è stato risposto e si avvicinò con questa sintesi:

utilizzando ofstream: ios :: out è il default, anche se nulla è specificato, ma se è stato utilizzato solo ios :: con ofstream, senza errori di compilazione (se non si utilizza read () o >> o qualche oggetto ifstream), ma nessun file sarebbe scritto.

utilizzando ifstream: ios :: in è il default, anche se nulla è specificato, ma se è stato utilizzato solo ios :: con ifstream, senza errori di compilazione (a meno che non si utilizza write () o << o qualche oggetto ofstream), ma non si può leggere qualsiasi informazioni dal file.

utilizzando fstream: non predefiniti, è necessario determinare in modo esplicito che cosa avete intenzione di fare. In caso contrario, nessun errore di compilazione, ma non si ottiene ciò che si vuole semplicemente.

Per quanto riguarda la domanda iniziale, entrambi funzionano esattamente la stessa cosa!

Altri suggerimenti

Per un ofstream, ios::out è il default, quindi non c'è alcuna differenza. Credo che l'unica volta che specifica ios :: out fa la differenza è se si utilizza un fstream, che può essere aperto per la lettura o la scrittura, o di entrambi.

Nella maggior parte dei casi mi aspetto che ci sia alcuna differenza, anche se sembra che questo potrebbe essere tecnicamente specifica implementazione.

Nella mia implementazione (GCC 3.4.3) all'aperto per l'ofstream utilizza i ios ::: fuori del modo nel ofstream-> open () chiamano indipendentemente da ciò che viene specificato tramite il costruttore quindi è puramente facoltativa. Se si utilizza fstream, questo non è il caso e avrebbe bisogno di essere specificato in modo esplicito.

Verificando la standard, sezione 27.8.1.3 discute i vari modificatori ios (come ios::in e ios::out), e li mappa ai parametri C fopen(). Secondo la norma, se non ci sono modificatori specificati in un file aperto, l'open fallisce.

In 27.8.1.9, troviamo che ofstream funziona così, ma con ios::out specificato automaticamente. Pertanto, la risposta alla domanda iniziale è che sia funzionerà esattamente la stessa.

Non so perché le persone stanno scoprendo che l'apertura di un fstream senza né ios::in o ios::out, ma la mia lettura dello Standard dice che non dovrebbe funzionare. Sarei interessato a letture di 27.8.1.3 di altre persone.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top