2010-12-01 24 views
5

He abierto un archivo en modo binario y me gusta escribir en un archivo.¿Cuál es la diferencia entre ofstream "<<" y Write

ofstream ofile("file.txt",ios_base::binary) 
    int a = 1; 
    float f = 0.1; 
    string str = 10; 
    ofile<<a<<f<<str; 

gustaría saber lo que la diferencia entre la escritura usando "< <" y utilizando "ofile.write". que es el mejor y efectivo para escribir en modo binario.

+1

Esta es una conjetura total, pero apuesto que 'operator <<' se implementa usando 'write()' – Falmarri

Respuesta

5

operador < < formateará sus datos como texto. Mientras que la escritura dará salida a los datos en el mismo formato que se almacena en RAM. Entonces, si está escribiendo archivos binarios, quiere usar escritura.

Sin embargo, si escribe tipos que no son pod, debe tener cuidado. No se puede simplemente decir:

write(&mystring, sizeof(std::string)); 

Es necesario tener alguna manera de dar salida a los datos reales, que no se almacena en la misma clase o estructura.

+0

Sospecho que debería de 'write (& mystring, mystring.size())' – Dilawar

+0

@Dilawar: No, eso es aún más erróneo. Los datos de caracteres no se almacenan en el objeto de cadena en sí. Se asigna de forma dinámica por separado y se hace referencia a él mediante un puntero. Puede usar 'mystring.c_str()', pero también necesita almacenar el tamaño de alguna manera si desea poder recuperarlo correctamente. –

1

La escritura de AFAIK pasa el valor 'como está' donde el operador < < realiza algunos formateos.

Para obtener más información, vea here que tiene puntos que enumeran algunas de las funciones.

Como se ha mencionado, para los datos binarios es general, es preferible utilizar la escritura, ya que sólo da salida a los datos sin cualquier formato (que es muy importante para los datos binarios como formato adicional puede invalidar el formato)

Cuestiones relacionadas