[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