[C con Clase] Mis problemas con los ficheros
Juan
jmicanovelles en gmail.com
Mar Oct 7 20:42:27 CEST 2008
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 el resultado es el mismo:
fwrite(rDatos,1,sizeof(rDatos),fDatos)// modo correcto
JR> 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
Más información sobre la lista de distribución Cconclase