Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: kuni2006 en 9 Agosto 2016, 20:41 pm



Título: Problema con feof
Publicado por: kuni2006 en 9 Agosto 2016, 20:41 pm
Hola yo tengo el siguiente codigo para escrbir en un archivo

Código
  1. {
  2.        if(feof(file1)!=EOF)
  3.        {
  4.        rewind(file1);
  5.        fscanf(file1, "%d", &libre);
  6.        printf("Posicion: %d", libre);
  7.        fseek( file, libre*sizeof(Persona), SEEK_SET );
  8.        }
  9.        else
  10.        {
  11.        fseek( file, 0, SEEK_END );
  12.        }
  13.        fwrite(&persona, sizeof(Persona), 1, file);
  14.        printf("\nPersona guardada!\n");
  15.        pausar();
  16.        fclose(file);
  17.        }

Hasta donde entiendo, si el archivo esta vacio tiene que ir al else pero no lo hace, alguien me puede dar una mano? desde ya gracias


Título: Re: Problema con feof
Publicado por: AlbertoBSD en 9 Agosto 2016, 20:52 pm
Segun la pagina:

http://www.cplusplus.com/reference/cstdio/feof/

Citar
This indicator is generally set by a previous operation on the stream that attempted to read at or past the end-of-file.
Tiene que existir una operacion previa que ya alcanzada el Fin del Archivo.

Esto es.

Si un archivo tiene 100 bvtes y tu les exactamente 100 bytes y no mas, no se activa el Fin del Archivo.
Por lo menos es lo que tengo entendido

Deberias de validar si esta vacio de alguna forma diferente, existe la libreria sys/stat.h en la cual te indica uno de los valores de la estructura stat la longitud del archivo.

Saludos!

Saludos!


Título: Re: Problema con feof
Publicado por: class_OpenGL en 9 Agosto 2016, 21:08 pm
AlbertoBSD, tienes la razón. El indicador de final de archivo solo se activa si se ha intentado leer uno o más bytes, pero no se ha/han podido leer porque no quedan más

Esto significa que hay que comprobar el final de archivo después de una operación de lectura.