Lectura de ficheros

Juan Carlos
26 de Junio del 2004
Mi problema es con la lectura de ficheros
Este es el código que tengo:

fwrite (contactos.nombre, 50, 1, DATOS);
fwrite (contactos.apellidos, 50, 1, DATOS);
fwrite (contactos.apodo, 50, 1, DATOS);
fwrite (contactos.telefono, 50, 1, DATOS);
fwrite (contactos.email, 100, 50, DATOS);

while (!feof(DATOS))
{
fread (contactos.nombre, 50, 1, DATOS);
fread (contactos.apellidos, 50, 1, DATOS);
fread (contactos.apodo, 50, 1, DATOS);
fread (contactos.telefono, 50, 1, DATOS);
fread (contactos.email, 50, 1, DATOS);

printf ("n%s", contactos.nombre);
printf ("%sn", contactos.apellidos);
printf ("%sn", contactos.apodo);
printf ("%sn", contactos.telefono);
printf ("%sn", contactos.email);

Pero al ejecutar el programa me imprime solo signos y segmentos de los datos, y peor cuando son mas de un registro.

Juan Carlos
26 de Junio del 2004
El fichero lo abri de la siguiente manera:

fopen = ("DATOS.DAT", "r");

Y lo de 50 veces 100 bytes, bueno, esa sintaxis me la enseñaron en la escuela y no estoy seguro que hace el 50, 1, solo se que el 50 es el tamaño del campo (no estoy seguro), pero el 1 no se que signifique.
Gracias.

eg_velasco
26 de Junio del 2004
estas abriendo el archivo para leer "r" y lo tendrias que abrir con "r+" que es read y write o con "w+" que es para update.

hisham
26 de Junio del 2004
si utiliza el "w+", lo que provocara que la informacion antigua se sobreescriba con la nueva.
lo aconsejable es "a+" (permite la lectura y escritura de la informacion, y ademas, a la hora de escribir, se situa en el final, que es realmente lo que se llama ACTUALIZAR)

Hisham
[i]"... we are not built by stone..."[/i]

Mariano Ventaja
26 de Junio del 2004
El primer numero es la cantidad de bytes y el segundo las veces que se va a escribir. Osea, si pones 100,50 estas diciendo que escriba 50 veces 100 bytes.

size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);

fwrite appends n items of data each of length size bytes to the given output file. The data written begins at ptr. The total number of bytes written is (n x size). ptr in the declarations is a pointer to any object.

Saludos,
Mariano http://www.c0d3rz.com.ar

Juan Carlos
26 de Junio del 2004
Lo de 50,100 fue un error de dedo, en realidad es 50,1

hisham
26 de Junio del 2004
debo alertarte que no debes mostrar los datos contenidos en el struct directamente, ya que solo contienen referencias a la informacion guardada dentro del archivo.
esto es una forma de lo que podrias hacer...

si tienes dudas al respecto, no dudes en contactarme a mi e-mail.

void abrir(char *filename)
{
FILE *fichero;

fichero= fopen(filename,"rb");
if (fichero== NULL)
throw "no se puede abrir";

while(!feof(fichero))
{
SDatos s;

fread(&s,sizeof(s),1,fichero);
CDatos n;

n=Datos(s);
/* aqui lo convierto el struct en un dato, definido en/un constructor al que se le pasa una estructura
*/
Adicionar(n);
} fclose(fichero);

cout<<"lo guardado era:"<<n.getCadena();
// muestro el contenido;
}


eg_velasco
26 de Junio del 2004
A mi me gustaria saber con que instrucción abriste el archivo DATOS, es decir, el codigo del fopen(); porque me parece que alli tenes el problema.

Mariano Ventaja
26 de Junio del 2004
fwrite (contactos.email, 100, 50, DATOS);

Hay que escribir 50 veces 100 bytes?

Saludos,
Mariano http://www.c0d3rz.com.ar