2009-10-08 12 views
15

Estoy escribiendo un código que se ejecuta en Windows y genera un archivo de texto que luego se convierte en la entrada de un programa en Linux. Este programa se comporta incorrectamente cuando se le dan archivos que tienen líneas nuevas que son CR + LF en lugar de solo LF.C++ cambio de línea desde CR + LF a LF

Sé que puedo usar herramientas como dos2unix, pero me gustaría omitir el paso adicional. ¿Es posible obtener un programa C++ en Windows para usar la línea nueva de Linux en lugar de Windows?

Respuesta

23

Sí, debe abrir el archivo en modo "binario" para detener la nueva traducción.

Cómo lo hace depende de cómo está abriendo el archivo.

Usando fopen:

FILE* outfile = fopen("filename", "wb"); 

Usando ofstream:

std::ofstream outfile("filename", std::ios_base::binary | std::ios_base::out); 
+1

De acuerdo. Abra la secuencia como binario y no se lleva a cabo ninguna traducción. la salida de '\ n' o std :: endl a dicha secuencia da como resultado una alimentación de línea solamente. – Clifford

-1

bien, así que esto probablemente no es lo que quiere oír, pero aquí está mi $ 0,02 en base a mi experiencia con este:

Si necesita pasar datos entre diferentes plataformas, a largo plazo probablemente sea mejor utilizar un formato que no le importe cómo se ve el salto de línea. . Si se trata de archivos de texto, los usuarios a veces se meterán con ellos. Si al desordenar los finales de línea causan que su aplicación falle, esta será una aplicación de soporte intensivo.

He estado allí, hecho eso, cambiado a XML. Hicieron que los chicos de soporte fueran mucho más felices.

+0

Si solo pudiera elegir los formatos con los que tengo que trabajar ..... * risa hueca *. – GiantCowFilms

Cuestiones relacionadas