Test Foro de elhacker.net SMF 2.1

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

{
       if(feof(file1)!=EOF)
       {
       rewind(file1);
       fscanf(file1, "%d", &libre);
       printf("Posicion: %d", libre);
       fseek( file, libre*sizeof(Persona), SEEK_SET );
       }
       else
       {
       fseek( file, 0, SEEK_END );
       }
       fwrite(&persona, sizeof(Persona), 1, file);
       printf("\nPersona guardada!\n");
       pausar();
       fclose(file);
       }


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/

CitarThis 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.