Foros del Web » Programación para mayores de 30 ;) » C/C++ »

fread, me muestra 2 veces el ultimo registro

Estas en el tema de fread, me muestra 2 veces el ultimo registro en el foro de C/C++ en Foros del Web. Hola amigos, Estoy haciendo una aplicacion que guarda registros en un documento de texto. Es super simple, guardar y leer. La lectura la hago con ...
  #1 (permalink)  
Antiguo 19/07/2008, 20:17
kid
 
Fecha de Ingreso: diciembre-2003
Mensajes: 295
Antigüedad: 20 años, 5 meses
Puntos: 0
fread, me muestra 2 veces el ultimo registro

Hola amigos,

Estoy haciendo una aplicacion que guarda registros en un documento de texto.

Es super simple, guardar y leer.

La lectura la hago con fread, preguntando si acaso es el fin del archivo (feof), pero siempre me muestra 2 veces último registro.

Como puedo hacer para guardar el registro actual y compararlo con el que viene ?
Si son iguales se asumiría que se repite y por ende no lo mostraría.

Como lo puedo hacer ?

Se los agradecería.
  #2 (permalink)  
Antiguo 19/07/2008, 21:55
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: fread, me muestra 2 veces el ultimo registro

Eso pasa porque al final del archivo hay una linea vacía, es decir un retorno de carro.
De todas formas, si estás usando fread puedes usar el valor que retorna para verificar que has llegado al final del archivo, ya que este retorna el número de bytes que se han leído del archivo, siendo distinto de los que debería leer en caso de haber llegado al final del mismo.

Aquí te dejo un código para leer un archivo sin que se repita el final usando fread:
Código:
FILE *archivo;
char s[12];
int leidos;

archivo=fopen("data.txt", "rb"); // En modo binario para leer todo incluyendo retornos de carro.

while(!feof(archivo)) {
        leidos=fread(&s, sizeof(char), sizeof(s)-1, archivo);
        s[leidos]=0x00; // Para asegurarse que la cadena leída tenga un final.
        printf("%s", s);
        if(leidos!=sizeof(s)-1) break;
}
Pero si estás leyendo estrictamente texto, también puedes usar fgets, aquí te dejo un código para leer un archivo sin que se repita el final usando fgets:
Código:
FILE *archivo;
char s[12];
int leidos;

archivo=fopen("data.txt", "r");

while(fgets((char*)&s, sizeof(s), archivo)) {
        printf("%s", s);
}
Para comparar los datos que has leído con los anteriores puedes usar memcmp.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:15.