Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

238
Vistas
¿Es necesario escribir un if "portátil" (c == '\n') para procesar archivos multiplataforma?

Este pensamiento proviene de una discusión sobre un problema práctico Reemplazar varias líneas nuevas en un archivo con solo una . Ocurrió algo incorrecto al usar un terminal cygwin que se ejecuta en una máquina con Windows 8.1.

Dado que el terminador de fin de línea sería diferente, como \n , \r o \r\n , ¿es necesario escribir un "portátil" if(c=='\n') para que funcione bien en ¿Linux, Windows y OS X? ¿O la mejor práctica es simplemente convertir el archivo con comandos/herramientas?

 #include <stdio.h> int main () { FILE * pFile; int c; int n = 0; pFile=fopen ("myfile.txt","r"); if (pFile==NULL) perror ("Error opening file"); else { do { c = fgetc (pFile); if (c == '\n') n++; // will it work fine under different platform? } while (c != EOF); fclose (pFile); printf ("The file contains %d lines.\n",n); } return 0; }

Actualización1:

¿CRT siempre convertirá los finales de línea en '\ n'?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Si un archivo de entrada se abre en modo binario (el carácter 'b' en la cadena de modo), entonces es necesario preocuparse por la posible presencia de '\r' antes '\n' .

Si el archivo no se abre en modo binario (y tampoco se lee usando funciones binarias como fread() ), entonces no es necesario preocuparse por la presencia de '\r' antes '\n' porque eso se manejará antes que el su código recibe la entrada, ya sea mediante una función del sistema relevante (por ejemplo, un controlador de dispositivo que lee la entrada del disco o desde stdin ) o mediante la implementación de las funciones que usa para leer la entrada del archivo.

Si está transfiriendo archivos entre sistemas (por ejemplo, escribiendo el archivo en Linux y transfiriéndolo a un sistema Windows, donde un programa intenta leerlo), entonces tiene opciones;

  • escriba y lea el archivo en modo no binario, y realice una traducción relevante del archivo al transferirlo entre sistemas. Si usa ftp , esto se puede manejar transfiriendo el archivo usando el modo de texto en lugar del modo binario. Si el archivo se transfiere en modo binario, deberá ejecutar el archivo a través de dos2unix (si transfiere el archivo a unix) o a través de unix2dos (hacia el otro lado).
  • Realice todas sus E/S en modo binario, transfiéralos entre sistemas usando el modo binario y nunca los lea en modo no binario. Entre otras cosas, esto le da un control explícito sobre qué datos hay en el archivo.
  • Escriba su archivo en modo texto, transfiera el archivo como mejor le parezca. Luego solo lea en modo binario y, cuando su código de lectura encuentre un par \r\n , suelte el carácter '\r' .

Podría decirse que el último es el más robusto: el código de escritura puede incluir \r antes de \n caracteres, o puede que no, pero el código de lectura simplemente ignora cualquier carácter '\r' que encuentre antes de un carácter '\n' . Tal código probablemente incluso funcionará si los archivos se editan a mano (por ejemplo, con un editor de texto, que puede configurarse por separado para insertar o eliminar \r y \n ) antes de leerlos.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda