2009-08-29 9 views
6

Ho un'immagine jpeg in un buffer char [] in memoria, tutto ciò che devo fare è scriverlo sul disco esattamente come è. In questo momento mi sto facendo questoPerché il metodo C++ ofstream write() modifica i miei dati grezzi?

ofstream ofs; 
ofs.open(filename); 
ofs.write(buffer, bufferLen); 
ofs.close(); 

ma l'immagine non viene fuori a destra, sembra confuso con strisce bianche e nere casuali ovunque. Dopo aver confrontato l'immagine con l'originale in un visualizzatore esadecimale, ho scoperto che ofstream sta modificando i dati quando pensa che sto scrivendo un carattere di nuova riga. Ogni volta che 0x0A compare nell'originale, il ofstream scrive come due byte: 0x0D0A. Devo supporre che ofstream abbia intenzione di convertire da LF solo a CRLF, c'è un modo standard per farlo non farlo?

risposta

9

è necessario impostare la modalità file per binary quando si è opening esso:

std::ofstream file; 
file.open("filename.jpg", std::ios_base::out | std::ios_base::binary); 

In questo modo il flusso doesn provare a regolare le nuove righe nel formato di testo nativo.

5

Provare ad aprire l'ofstream come binario. Qualcosa del genere dovrebbe funzionare:

ofstream ofs; 
ofs.open(filename, ios::out | ios::binary); 
ofs.write(buffer, bufferLen); 
ofs.close(); 
1

Dal momento che non sta aprendo il file in modalità binaria, è impostato per l'output formattato per impostazione predefinita. Nell'output formattato, l'implementazione esegue la conversione dei caratteri di fine riga durante la descrizione.

-2

Vorrei poter ottenere la mia versione per scrivere qualsiasi cosa ... nessun errore, nessuna lamentela, niente di sbagliato quando si esegue il debug ma non tenta nemmeno di creare il file. Che diavolo c'è di sbagliato con fopen, fwrite e fclose ... Non ho mai avuto un problema con loro

Problemi correlati