• Domingo 22 de Diciembre de 2024, 03:19

Autor Tema:  Re: ayuda con la sentencia feof  (Leído 1759 veces)

delpa

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: ayuda con la sentencia feof
« en: Lunes 18 de Marzo de 2002, 15:30 »
0
He tenido un problema con esta sentencia, ya que en un archivo en el que he metido dos struct de tamaño 38 bit con fwrite, es decir el archivo tiene 76 bit. La cosa es que al poner la condicion de que al llegar al final deje de leer, no obtengo nucna que feof valga distinto de cero. De hecho he probado a avanzar con fseek 76 bit y feof sigue sin darme distinto de cero. Puede ser debido a que los struct funcionan de diferente manera??
Muchas gracias.

bench

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Re: ayuda con la sentencia feof
« Respuesta #1 en: Martes 19 de Marzo de 2002, 17:09 »
0
Espero Que la Siguiente Informacion Sea de Utilidad




/*****
Prototipo de la Funcion fwrite:
******************************/
size_t fwrite(Buffer, Tam_Elemento, Nro_Elementos, Punt_File)
char *Buffer;             /* Puntero a la Información Que Se Va A Guardar */
size_t Tam_Elemento;               /* Nro de Bytes Por Elemento a Guardar */
Nro_Elementos;                              /* Nro de Elementos a Guardar */
FILE *Punt_File;/* Puntero al Archivo Donde Se Va A Grabar la Informacion */

/***
Valor de Retorno
****************

El Numero de Elementos Efectivamente Grabados.

Este Nro Debe Ser Igual a Nro_Elementos, En Caso Contrario Indica Que
Se ha Producido Un Error de Escritura y  Retorna  el Nro de Elementos
Efectivamente Guardado Entes de Producirse el Error. En cuyo Caso  la
instrucción ferror (FILE *Punt_File) Retornara True Para Confirmar La
Existencia de Un Error.
**********************/

/***
Verificar Si La Escritura Tuvo Exito
Si No Grabo El Nro de Elementos Indicado Se Produjo un Error
***********************************************************/

if(fwrite(Buffer, Tam_Elemento, Nro_Elementos, Punt_File) != Nro_Elementos)
 {
  perror(Error de Escritura Ejenplo.c Linea xxx:);
  exit(-1);
  }
/***
else printf ("La Escritura Fue Exitosa");
****************************************/

/*****
Prototipo de la Funcion fread:
******************************/
size_t fread(Buffer, Tam_Elemento, Nro_Elementos, Punt_File)
char *Buffer;             /* Puntero Donde se Va a Guardar la Información */
size_t Tam_Elemento;                  /* Nro de Bytes Por Elemento a Leer */
Nro_Elementos;                                 /* Nro de Elementos a Leer */
FILE *Punt_File;  /* Puntero al Archivo Donde Se Va A Leer la Informacion */

/***
Valor de Retorno
****************

El Numero de Elementos Efectivamente Leidos.

El Nro de Elementos Leidos Debe Ser Igual a Nro_Elementos. En Caso Contrario
Indica Que Se llego al Fin Del Archivo o Que Se Produjo Un Error
***************************************************************************/

/***
Verificar Si La Lectura Tuvo Exito
Si No Leyo El Nro de Elementos Indicado Se Llego a Fin de Archivo
o Se Produjo un Error en la Lectura
***********************************************************/

if(fread(Buffer, Tam_Elemento, Nro_Elementos, Punt_File) != Nro_Elementos)
 {
  if(!ferror(Punt_File)) printf("Se Llego a Fin de Archivo");
  else
   {
    perror(Error de Lectura Ejemplo.c Linea xxx:);
    exit(-1);
    }
  }
/***
printf ("La Lectura Fue Exitosa");
*********************************/
/*****
Resto del Codigo
...
...

/***
Si Se Esta Dentro de Un Bucle Verificar Que Se Llego  a Fin de Archivo
Por Ejemplo:
*********************************************************************/
/***
Si No Hay Fin de Archivo Continue
********************************/
if(!feof(Punt_File)) continue;

/***
Si Encuentra Fin de Archivo Rompa
********************************/

if(feof(Punt_File)) break;
*********************/

/***
Cerrar Los Archivos Abiertos Antes de Terminar El Programa
*********************************************************/
fclose(Punt_File);


/**********************************
Otros Elementos a Considerar en el Sistema de Entrada/Salida
***********************************************************/
/***
Despues de Toda Accion de Lectura o Escritura fwrite o fread la
POSICION ACTUAL del Punt_File Apunta a la Posicion Nro_Elementos
Por Tam_Elementos Leidos o Escritos.
Ejemplo:
**************************************************************/

/***
Accion de Escritura
********************************************************/
strcpy(Buffer,"Esta Es Una Escritura de Prueba");
Nro_Elementos = strlen(Buffer);
if(fwrite(Buffer, sizeof(char),Nro_Elementos, Punt_File) != Nro_Elementos)
 {
  perror(Error de Escritura Ejemplo.c Linea xxx:);
  exit(-1);
  }
else printf ("Se Grabo [%s] Exitosamenten",Buffer);


/***
Accion de Lectura de Lo que Se Acaba de Grabar
*********************************************/
/***
Prototipo de Funcion fseek:
***************************
int fseek(Punt_File, Nro_Bytes, Origen)
FILE *Punt_File;
long Nro_Bytes;    /* Nro de Bytes a Moverse "Valor negativo o Positivo" */
int Origen;        /* A Partir de Donde Se Va a Mover:
                      SEEK_SET Desde el Origen del Archivo,
                      SEEK_CUR A Partir de la Posicion Actual
                      SEEK_END A Partir del Fin del Archivo              */
**************************************************************************/

/***
Se Posiciona el Archivo En la Posicion Inicial Donde Se Grabo.
Moviendose desde la Posición Actual Hacia Atras Un Numero de Bytes
Igual Al Tamaño de Cada Elemento Por el Nro. de Elementos Grabados
*****************************************************************/
fseek(Punt_File, -sizeof(char)*Nro_Elementos, SEEK_CUR);
/***
Se Inicializa el Buffer
**********************/
Buffer[0] = 0x00; /* Se coloca "" en el Primer Elemento del Buffer */
/***
Se lee el Archivo
****************/
if(fread(Buffer, Tam_Elemento, Nro_Elementos, Punt_File) != Nro_Elementos)
 {
  if(!ferror(Punt_File)) printf("Se Llego a Fin de Archivon");
  else
   {
    perror(Error de Lectura Ejemplo.c Linea xxx:);
    exit(-1);
    }
  }
printf ("Buffer Leyo [%s] Exitosamenten",Buffer);

/***
Si Se Desea Ir Al Comienzo del Archivo
Se Puede Utilizar la Instruccion:

void rewind(FILE *Punt_File)
*************************************/

ibito

  • Miembro HIPER activo
  • ****
  • Mensajes: 549
  • Nacionalidad: mx
  • Se mas de C++ que lo que se de ese CSS
    • Ver Perfil
    • http://www.ibquezada.com
ayuda con la sentencia feof
« Respuesta #2 en: Sábado 25 de Mayo de 2002, 20:00 »
0
pues no entiendo muy bien pero lo q tengo entendido q puedes hacer es meter en un ciclo todo y:
FILE *fp;
...
...
...
do {
    ...
    ...
    ...
} while (!feof(fp));
______________________________________
www.hazjuegos.com Una comunidad dedicada al desarrollo de videojuegos.