[C con Clase] Mis problemas con los ficheros
Juan
jmicanovelles en gmail.com
Mie Oct 8 16:33:57 CEST 2008
Bueno, segun lo mires: size 1 byte , en ese caso sizeof puntero= count= número de elementos, pero dejalo, porque da lo mismo, que lo mismo da.
Juan
El pasado 2008-10-08 08:52:43, Juan Rubio escribió:
JR> Hola,
JR> Gracias a tu respuesta me he dado cuenta de que estaba usando mal los
JR> punteros, pero me gustaría aclarar algo sobre la función fwrite y fread.
JR> size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
JR> size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream
JR> En la referencia dice que los parámetros son: ptr, size, count,
JR> stream y en ese orden. en donde:
JR> ptr, es un puntero a una dirección de memoria con un tamaño mínimo de
JR> size.
JR> size, es el tamaño en bytes de los elementos que van a ser leidos o
JR> escritos.
JR> count, el número de elementos cada uno de ellos con el tamaño size.
JR> stream, puntero a un objeto FILE en donde vamos a hacer la lectura o
JR> escritura.
JR> Según esto, lo que pones
JR> fread(rDatos,1,sizeof(rDatos),fDatos);
JR> sería incorrecto ya que la forma correcta de hacerlo sería.
JR> fread(rDatos,sizeof(rDatos),1,fDatos);
JR> Un saludo y muchas gracias por vuestro tiempo.
JR> Juan Antonio.
JR> Juan escribió:
JR> > Hola Juan Antonio, bueno tu codigo funciona, tienes algún error, te lo corrijo sobre el código:
JR> >
JR> >
JR> >
JR> > El pasado 2008-10-06 18:58:42, Juan Rubio escribió:
JR> >
JR> > JR> Hola a todos,
JR> > JR> Siguiendo con mis problemas con los archivos, estoy intentando que me
JR> > JR> abra una archivo cuando exista y que lo cree cuando no existe.
JR> > JR> Tengo el ejemplo de abajo, y estoy observando que SIEMPRE me lo crea
JR> > JR> y me graba el registro.
JR> > JR> Supongo que sabreis porque me pasa esto, supongo que estaré haciendo
JR> > JR> alguna burrada que no soy capaz de ver.
JR> > JR> Muchas gracias.
JR> > JR> Juan Antonio.
JR> > JR>
JR> > JR> #include <iostream>
JR> > JR> #include <stdio.h>
JR> > JR> #include <stdlib.h>
JR> > JR> using namespace std;
JR> > JR> int RutinaFichero()
JR> > JR> {
JR> > JR> char rDatos[]="elemento primero";
JR> > JR> char fichero[]="s:\\archivo.dat";
JR> > Lo mas seguro es que no tengas la unidad s, sinó deberias crearla,
JR> > eso creo, prueba con char fichero[]="archivo.dat";
JR> > es para probar el código...
JR> > JR> FILE *fDatos;
JR> > JR> fDatos=fopen(fichero,"rb+"); // Lectura y escritura
JR> > JR> binario...no lo crea
JR> > JR> if(!fDatos) // Si no existe...
JR> > JR> {
JR> > JR> fDatos=fopen(fichero,"wb+"); // Crea el archivo si no existe.
JR> > JR> fwrite(&rDatos,sizeof(rDatos),1,fDatos);
JR> > Aquí tienes un fallo: rDatos es un puntero, no hay que ponerle & y el orden debería ser al revés, pero elresultado es el mismo:fwrite(rDatos,1,sizeof(rDatos),fDatos)// modo correctoJR> cout << "grabo el registro"<< endl; // las dos veces pasa
JR> > JR> por aqui...
JR> > JR> }
JR> > JR> fseek(fDatos, 1, SEEK_SET);
JR> > Aquí otro fallo, frwrite ha escrito en la posición 0:
JR> > fseek(fDatos, 0, SEEK_SET);//correcto
JR> >
JR> > JR> fread(&rDatos,sizeof(rDatos),1,fDatos);
JR> > Mismo fallo de antes:
JR> > fread(rDatos,1,sizeof(rDatos),fDatos);//correcto
JR> > JR> fclose(fDatos);
JR> > JR> return 0;
JR> > JR> }
JR> > JR> int main()
JR> > JR> {
JR> > JR> RutinaFichero();
JR> > JR> RutinaFichero();
JR> > JR> return 0;
JR> > JR> }
JR> > JR> _______________________________________________
JR> > JR> Lista de correo Cconclase Cconclase en listas.conclase.net
JR> > JR> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
JR> > JR> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
JR> >
JR> >
JR> > Una vez corregido esto, el programa funciona.
JR> > Juan
JR> > _______________________________________________
JR> > Lista de correo Cconclase Cconclase en listas.conclase.net
JR> > http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
JR> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
JR> >
JR> >
JR> _______________________________________________
JR> Lista de correo Cconclase Cconclase en listas.conclase.net
JR> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
JR> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
Más información sobre la lista de distribución Cconclase