2010-02-08 6 views

risposta

22

ios::out apre il file per la scrittura.

ios::binary assicura che i dati vengano letti o scritti senza tradurre nuovi caratteri di linea da e verso \r\n al volo. In altre parole, esattamente quello che dai al flusso è esattamente ciò che è scritto.

+0

e cosa significa usare entrambi? –

+0

Beh, scriveresti su un file senza tradurre alcun personaggio. –

+2

Quindi, se non contrassegno un ifstream come binario, e leggo, diciamo 10 doppi da esso, e Windows trova un '\ n' casuale nei dati, quindi lo stream viene espanso da '10 * sizeof (double)' a '10 * sizeof (double) + 1' come' \ r' è inserito, e sovrascrive quindi la fine del mio doppio buffer? – user14717

4

Aprire un file con ios :: binary controlla come vengono gestiti i caratteri di nuova riga. Su Windows, sono espanse alle coppie CRLF. È così: non ha alcun effetto su come funzionano le cose come l'operatore < <.

+0

ma quali sono le coppie CLRF? –

+2

CLRF è sinonimo di ritorno a capo, avanzamento riga. Questi sono i due byte utilizzati per specificare una nuova riga nella codifica del testo di Windows. È per lo più ridondante perché su un computer, hai solo bisogno di un carattere di nuova riga. –

+3

Molto tempo fa, ai tempi di Teletypes e macchine da scrivere, le macchine di output avevano carrelli spostati a sinistra per scrivere mentre i caratteri venivano stampati. Un comando, "Ritorno a capo", riportava il carrello a sinistra. Un altro comando, 'Linefeed', ha avanzato la carta alla riga successiva. Questi due comandi potevano essere eseguiti indipendentemente così che la carta avanzava a metà linea (usando 'Linefeed') o riscrivendo la linea corrente (usando' Ritorno a capo carrello '). Come coppia, fanno iniziare la stampa sul margine sinistro della riga successiva. –