2009-08-29 6 views
6

Tengo una imagen jpeg en un búfer char [] en la memoria, todo lo que tengo que hacer es escribirlo en el disco exactamente como está. En este momento estoy haciendo esto¿Por qué el método C++ ofstream write() modifica mis datos sin formato?

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

pero la imagen no sale bien, se ve distorsionada con rayas en blanco y negro al azar por todas partes. Después de comparar la imagen con el original en un visor hexadecimal, descubrí que thestream modifica los datos cuando cree que estoy escribiendo un carácter de nueva línea. En cualquier lugar donde 0x0A aparezca en el original, thestream escribe como dos bytes: 0x0D0A. Tengo que asumir que ofstream tiene la intención de convertir de LF solo a CRLF, ¿hay alguna manera estándar de que no lo haga?

Respuesta

9

debe establecer el modo de archivos en binary cuando esté opening que:

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

De esta manera la corriente doesn Intente ajustar las líneas nuevas a su formato de texto nativo.

5

Intenta abrir el flujo de corriente como binario. Algo como esto debería funcionar:

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

Puesto que no se está abriendo el archivo en modo binario, que se establece en la salida con formato por defecto. En la salida formateada, su implementación realiza la conversión de los caracteres de fin de línea como usted describe.

-2

Desearía poder obtener mi versión para escribir cualquier cosa ... sin errores, sin quejas, nada de malo cuando lo depura pero ni siquiera intenta crear el archivo. ¿Qué demonios estaba mal con fopen, fwrite y fclose ... Nunca tuve un problema con ellos

Cuestiones relacionadas