fin de archivo en un flujo no me lo respeta

25/02/2004 - 19:08 por Bruce Almighty | Informe spam
Saludos al grupo

tengo un codigo para visualizar ciertos registros guardados en un
archivo binario, el código es el siguiente:

if((archivo = fopen("users.dat", "r+b")) == NULL)
{
printf("El archivo 'users.dat' no existe...");
exit(-1);
}

do
{
fread(usuario, sizeof(struct psw), 1, archivo);
printf("%d - Nombre de usuario: %s Contrasena: %s Pos: %d", i+1,
usuario->username, usuario->password, ftell(archivo));
i++;
} while(!feof(archivo));

fclose(archivo);
break;


el problema es que cuando visualiza el último registro no detecta el fin
de archivo y vuelve a visualizar el último registro y es entonces cuando
detecta el fin de archivo, es decir, el último archivo me lo visualiza dos
veces. ¿cual puede ser el problema?

Ing. Francisco Javier Orozco Candela
Ingeniería Digital Aplicada S.A. de C.V.

Preguntas similare

Leer las respuestas

#1 Cholo Lennon
26/02/2004 - 02:15 | Informe spam
El ciclo típico para leer archivos es al revés (con la condición de fin de
archivo al principio de todo).

// Correcto
while (!EOF) {
...
}

y no como tu estás haciendo, es decir

// Incorrecto
do {
...
} while (!EOF);


Como ejercicio te queda a ti el averiguar el porqué de la cuestión!!

Saludos
Cholo Lennon
Salta, ARG
Respuesta Responder a este mensaje
#2 Bruce Almighty
26/02/2004 - 20:06 | Informe spam
Ya encontré el motivo: aqui está el código correcto, todo está en el orden
de las sentencias, ya que feof envia fin de archivo cuando fread ya no puede
leer informacion:

fseek(archivo, sizeof(struct psw)*i, SEEK_SET);
fread(usuario, sizeof(struct psw), 1, archivo);

while(!feof(archivo))
{
printf("%d - Nombre de usuario: %s Contrasena: %s Pos: %d", i+1,
usuario->username, usuario->password, ftell(archivo));
i++;
fseek(archivo, sizeof(struct psw)*i, SEEK_SET);
fread(usuario, sizeof(struct psw), 1, archivo);
}

"Bruce Almighty" escribió en el mensaje
news:%23$OCPp8%
Saludos al grupo

tengo un codigo para visualizar ciertos registros guardados en un
archivo binario, el código es el siguiente:

if((archivo = fopen("users.dat", "r+b")) == NULL)
{
printf("El archivo 'users.dat' no existe...");
exit(-1);
}

do
{
fread(usuario, sizeof(struct psw), 1, archivo);
printf("%d - Nombre de usuario: %s Contrasena: %s Pos: %d",


i+1,
usuario->username, usuario->password, ftell(archivo));
i++;
} while(!feof(archivo));

fclose(archivo);
break;


el problema es que cuando visualiza el último registro no detecta el


fin
de archivo y vuelve a visualizar el último registro y es entonces cuando
detecta el fin de archivo, es decir, el último archivo me lo visualiza dos
veces. ¿cual puede ser el problema?

Ing. Francisco Javier Orozco Candela
Ingeniería Digital Aplicada S.A. de C.V.


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