Lectura de ficheros
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.
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.
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.
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.
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.
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]
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]
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
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
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;
}
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;
}
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.
