Como leer un fichero hasta el final

21/02/2005 - 08:42 por Miguel | Informe spam
Estoy intentando leer un fichero mediante la funcion fgets, pero solo puedo
leer la primera linea, como puedo hacer el bucle para leer todo el
fichero¿?¿?

Preguntas similare

Leer las respuestas

#1 Sergio
21/02/2005 - 09:13 | Informe spam
Miguel escribió:
Estoy intentando leer un fichero mediante la funcion fgets, pero solo puedo
leer la primera linea, como puedo hacer el bucle para leer todo el
fichero¿?¿?





FILE *pf = fopen(...);

while (!feof(pf)) {
fgets(...);

}


fclose(pf);

fgets() lee una línea, o el máximo número de bytes que se le haya
indicado (depende de lo que ante suceda), y situa el puntero del fichero
en el byte siguiente al último leido, por lo que para leerlo de
principio a fin solo la condición de salida debe ser que el puntero esta
en el final del fichero (feof()).
Respuesta Responder a este mensaje
#2 Rodrigo Corral [MVP]
21/02/2005 - 10:53 | Informe spam
La mejor solución para leer un fichero hasta el final es usar el API
ReadFile.

Basicamente el tema es obtener el tamañó del fichero con GetFileSizeEx e ir
leyendo el fichero, bien por partes o bien del todo. Tendrás que asignar
memoria, se cuidadoso controlando el resultado de esas asignaciones sobre
todo si lees el fichero de una sola vez.

Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org
Respuesta Responder a este mensaje
#3 Isidro Muñoz
21/02/2005 - 22:50 | Informe spam
Hola,

fgets, lee hasta que encuentro un retorno de carro.
Lo correcto es que lo abras en modo texto si es con fopen
lo abras en modo "rt"

Iras leyendo líneas con retorno de carro.
En un fichero texto el retonro de carro son dos bytes el retorno de carro y
el retorno de linea.

Si abres un fichero en modo escritura y modo texto y escribes
fprintf(f, "prueba");
el se convierte en binario en dos bytes

Si abres el fichero en modo texto "rt"

cuando hagas un fgets leera hasta el que en realidad son dos bytes.

A lo mejor no me he explicado bien, lo que intento decir es que un fichero
abierto en modo texto si escribimos un se convierte en un retorno de
carro y retorno de linea que son dos bytes, si el fichero lo abrimos modo
texto y hacemos un fgets el lee hasta el retorno de carro que en este caso
en el fichero fisico es el retorno de carro y el retorno de linea.

Esto yo estoy harto de usarlo en ficheros texto, en ficheros binarios como
que no es muy bueno hacer un fgets.

fgets es muy usarlo en fichero texto .txt creados con bloc de notas, por
ejemplo, siempre y cuando no se graben en formato UNICODE.

Por ejemplo, imaginate que quieres imprimir por la impresora la cabecera de
un listado que esta en un fichero .txt creado con bloc de notas.

hacer un
while( feof)
{
fgets
fprintf( impresora, [datos leido en fgets]
}

es pseudocodigo y evidentemente es para hacernos una idea.


Saludos.
Isidro.

"Miguel" escribió en el mensaje
news:%23Zhz3j%
Estoy intentando leer un fichero mediante la funcion fgets, pero solo


puedo
leer la primera linea, como puedo hacer el bucle para leer todo el
fichero¿?¿?


Respuesta Responder a este mensaje
#4 Miguel
22/02/2005 - 08:47 | Informe spam
Muchas gracias he probado la funcion que me dijo Sergio y funciono, nose xq
antes me daba un error ya que lo habia probado con anterioridad gracias
a los tres... talueg
"Miguel" escribió en el mensaje
news:%23Zhz3j%
Estoy intentando leer un fichero mediante la funcion fgets, pero solo


puedo
leer la primera linea, como puedo hacer el bucle para leer todo el
fichero¿?¿?


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida