| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
NathanD
Registrado: 03 Oct 2012 Mensajes: 18
| Publicado: 21/02/2013 11:24 am | | | Título: Leer un fichero de texto entero |
| Buenas, estoy con ficheros, y tengo una duda. No consigo copiar un fichero de principio a fin si tiene saltos de línea. Lo he intentado de más de una forma, ésta una de ellas:
| Código: | while (! feof(fichero)) { fgets(linea, 80, fichero); }
|
Pongo un printf al final del bucle para imprimir la cadena, pero sólo imprime la última línea. En cambio si lo pongo dentro del bucle, me imprime cada línea.
¿Qué podría hacer y dónde estoy confundido? Gracias de antemano y saludos. |
| | Volver arriba | |  | leosan
Registrado: 19 Abr 2012 Mensajes: 730 Ubicación: GRAN CANARIA
| Publicado: 21/02/2013 12:00 pm | | | Título: Re: Leer un fichero de texto entero |
| | NathanD escribió: | Buenas, estoy con ficheros, y tengo una duda. No consigo copiar un fichero de principio a fin si tiene saltos de línea. Lo he intentado de más de una forma, ésta una de ellas:
| Código: | while (! feof(fichero)) { fgets(linea, 80, fichero); }
|
.................................................... |
Entiendo por el título del tema y el código que pones que no puedes "leer" el fichero y es que te faltaría "escribir" lo que lee fgets:
| Código: | while ( !feof(fichero) ) { fgets(linea, 80, fichero); puts(linea); } |
O mejor:
| Código: | while (fgets(linea, 80, fichero) != NULL) { puts(linea); } |
Si lo que pretendes es "copiar" el fichero en otro no entiendo entonces a qué te refieres. Saluditos!. |
| | Volver arriba | |  | NathanD
Registrado: 03 Oct 2012 Mensajes: 18
| Publicado: 21/02/2013 12:25 pm | | | Título: |
| Buenas,
quizá no me expliqué bien, mi propósito es "coger" todo el contenido de un fichero, para posteriormente copiarlo en otros archivos de texto y cosas por el estilo. |
| | Volver arriba | |  | | leosan
Registrado: 19 Abr 2012 Mensajes: 730 Ubicación: GRAN CANARIA
| Publicado: 21/02/2013 1:47 pm | | | Título: |
| | NathanD escribió: | Buenas, quizá no me expliqué bien, mi propósito es "coger" todo el contenido de un fichero, para posteriormente copiarlo en otros archivos de texto y cosas por el estilo. |
Entonces el camino es otro, haciendo uso en especial de fread para ir leyendo bloques y fwrite para ir escribiendo. Una versión muy sencilla de un copiador, que te puede servir para iniciarte, es el siguiente:
| Código: | /* Copiador de ficheros */
#include <stdio.h> FILE *fichOrg, *fichDest; /* Los dos ficheros */ char buffer[2048]; /* un buffer de 2048 bytes (2 K),para ir leyendo la información por bloques (y guardando después cada bloque en el otro fichero */ char nombreOrg[80], /* Los nombres de los ficheros */ nombreDest[80]; int cantidad; /* El número de bytes leídos */ int main(void) { /* Accedo al fichero de origen */ printf("Introduzca el nombre del fichero Origen: "); scanf("%s",nombreOrg); if ((fichOrg = fopen(nombreOrg, "rb")) == NULL) { printf("No existe el fichero origen!\n"); exit(1); } /* Y ahora al de destino */ printf("Introduzca el nombre del fichero Destino: "); scanf("%s",nombreDest); /*lo siguiente puede resultar menos legible que hacerlo en dos líneas separadas, como hemos hecho hasta ahora, pero es más compacto, y, sobre todo, muy frecuente encontrarlo en “fuentes ajenos” más avanzados*/ if ((fichDest = fopen(nombreDest, "wb")) == NULL) { printf("No se ha podido crear el fichero destino!\n"); exit(1); } /* Mientras quede algo que leer */ while (! feof(fichOrg) ) { /* Leo datos: cada uno de 1 byte, todos los que me caben */ cantidad = fread( buffer, 1, sizeof(buffer), fichOrg); /* Escribo tantos como haya leído */ fwrite(buffer, 1, cantidad, fichDest); } /* Cierro los ficheros */ fclose(fichOrg); fclose(fichDest); return 0; }
|
Pero repito, es una opción muy básica. Existen formas más sofisticadas de calcular el tamaño del fichero original(uso de fseek y ftell, reserva dinámica de memoria) y comprobar que lo escrito se corresponde con dicho tamaño. Pero en fin, no vamos a dártelo todo hecho.  Saluditos!. |
| | Volver arriba | |  | NathanD
Registrado: 03 Oct 2012 Mensajes: 18
| Publicado: 24/02/2013 8:55 am | | | Título: |
| | Muchas gracias, me ha sido de gran ayuda |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |