[ Foro de C ]

duda sobre espacio ocupado en fichero

10-Nov-2009 23:10
Roberto rrs
2 Respuestas

Tengo una duda sobre como se guarda información en ficheros, por ejemplo en el problema de la agenda con el struct:
struct
    { char nombre[30];
      char direccion[30];
      char movil[30];
      unsigned short dia;
      unsigned short mes;
      unsigned short anyo;
      } fichas[100];

Con este struct observe como cada ficha ocupaba 96 posiciones de memoria.

Mi duda es si aparte en el fichero hay que guardar otros datos ajenos al struct, como por ejemplo los valores de una tabla, etc.
¿Estos datos donde se guardarian?
¿Antes o despues de las posiciones del struct?, ¿o en otro fichero?
De antemano gracias por la respuesta.


11-Nov-2009 20:54
Jesús S.

¡Hola Roberto!

Yo también tengo mis dudas sobre cómo funciona el asunto y me adhiero a tus preguntas.

Efectivamente, sólo se guarda la cantidad de memoria RAM necesaria para almacenar el fichero, es decir la cantidad de fichas que tengas previstas por los 96 bytes que ocupa cada ficha.

Otra cosa que me llama la atención es que cuando está en la RAM el fichero sólo entiende de líneas: ni nombres, ni teléfonos, ni nada.

No tengo ni idea de dónde se localizan las fichas cuando voy copiando las líneas del fichero en cada variable del struct. Supongo que será fuera de la RAM, porque si no, efectivamente, también habría que prever memoria para ello.

Esperemos que el Profe o alguno más enterado nos informe del asunto.

Saludos.




13-Nov-2009 21:53
Nacho Cabanes (+83)

Con relación a la duda de Roberto: si quieres guardar datos de distintos tipos (por ejemplo, clientes y productos), suele ser preferible usar ficheros distintos, eso hace el manejo mucho más sencillo que si se intenta guardar todo en un mismo fichero (aunque también se podría).

Un segundo detalle: para saber qué ocupa una ficha no hace falta investigar con el tamaño del fichero: os lo dice "sizeof".

En cuanto a la duda de Jesús: en un fichero de texto, como los datos son de distintos tamaños, es habitual tener que tener todo en memoria si quieres consultar tanto los primeros datos como los últimos; en un fichero binario en el que guardes "structs" (es decir, que todos los datos sean del mismo tamaño), puedes optar por leer todo de golpe y guardarlo en RAM usando arrays (u otras estructuras más eficientes y más avanzadas), o bien por leer ficha a ficha, conservando sólo una en memoria y usando "fseek" cada vez que necesites leer otra.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)