[C con Clase] [Bulk] Re: Mis problemas con los ficheros

Juan Antonio Rubio RubioJA52 en yahoo.es
Mie Oct 8 10:52:43 CEST 2008


Hola,

   Gracias a tu respuesta me he dado cuenta de que estaba usando mal los
punteros, pero me gustaría aclarar algo sobre la función fwrite y fread.

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream

   En la referencia dice que los parámetros son: ptr, size, count,
stream y en ese orden. en donde:

   ptr, es un puntero a una dirección de memoria con un tamaño mínimo de
size.
   size, es el tamaño en bytes de los elementos que van a ser leidos o
escritos.
   count, el número de elementos cada uno de ellos con el tamaño size.
   stream, puntero a un objeto FILE en donde vamos a hacer la lectura o
escritura.

   Según esto, lo que pones

fread(rDatos,1,sizeof(rDatos),fDatos);

   sería incorrecto ya que la forma correcta de hacerlo sería.

fread(rDatos,sizeof(rDatos),1,fDatos);

   Un saludo y muchas gracias por vuestro tiempo.

   Juan Antonio.

Juan escribió:
> Hola Juan Antonio, bueno tu codigo funciona, tienes algún error, te lo corrijo sobre el código: 
>
>
>
> El pasado 2008-10-06 18:58:42, Juan Rubio escribió:
>  
> JR> Hola a todos,
> JR>    Siguiendo con mis problemas con los archivos, estoy intentando que me
> JR> abra una archivo cuando exista y que lo cree cuando no existe.
> JR>    Tengo el ejemplo de abajo, y estoy observando que SIEMPRE me lo crea
> JR> y me graba el registro.
> JR>    Supongo que sabreis porque me pasa esto, supongo que estaré haciendo
> JR> alguna burrada que no soy capaz de ver.
> JR>    Muchas gracias.
> JR> Juan Antonio.
> JR>   
> JR> #include <iostream>
> JR> #include <stdio.h>
> JR> #include <stdlib.h>
> JR> using namespace std;
> JR> int RutinaFichero()
> JR> {
> JR>    char rDatos[]="elemento primero";
> JR>    char fichero[]="s:\\archivo.dat";
>  Lo mas seguro es que no tengas la unidad s, sinó deberias crearla,
> eso creo, prueba con char fichero[]="archivo.dat";
> es para probar el código...
> JR>    FILE *fDatos;
> JR>    fDatos=fopen(fichero,"rb+");       // Lectura y escritura
> JR> binario...no lo crea
> JR>    if(!fDatos)                                  // Si no existe...
> JR>    {
> JR>       fDatos=fopen(fichero,"wb+");    // Crea el archivo si no existe.
> JR>       fwrite(&rDatos,sizeof(rDatos),1,fDatos);
> 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> por aqui...
> JR>    }
> JR>    fseek(fDatos, 1, SEEK_SET);
> Aquí otro fallo, frwrite ha escrito en la posición 0:
> fseek(fDatos, 0, SEEK_SET);//correcto
>
> JR>    fread(&rDatos,sizeof(rDatos),1,fDatos);
> Mismo fallo de antes:
> fread(rDatos,1,sizeof(rDatos),fDatos);//correcto
> JR>    fclose(fDatos);
> JR>    return 0;
> JR> }
> JR> int main()
> JR> {
> JR>    RutinaFichero();
> JR>    RutinaFichero();
> JR>    return 0;
> 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
>
>
> Una vez corregido esto, el programa funciona.
> Juan
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
>   

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20081008/3d0dbb05/attachment.html>


Más información sobre la lista de distribución Cconclase