[C con Clase] FSTREAMS, Estoy olvidado en algunos conceptos y uso
Listero Absoluto
listeroabsoluto en gmail.com
Vie Abr 27 18:51:26 CEST 2007
Buenas.
Hace rato que no uso esta clase y luego de mi "tour" por varios
lenguajes... estoy muy olvidado de como usarla y tengo un par de
preguntas:
Si defino una estructura, por ejemplo:
typedef
struct SData
{
int x;
char c[50];
float y;
};
Y necesito escribirla e inmediatamente leerla utilizo la siguiente
secuencia de metodos:
SData data, d2;
data.x = 1;
strcpy(data.c, "Hola");
data.y = .56;
fstream fs;
fs.open("file.dat", ios::in);
// Con esto creo el archivo si no existe
if (!fs)
fs.open("file.dat", ios::out | ios::binary);
fs.close();
fs.open("file.dat", ios::in | ios::out | ios::binary);
// Para saber si abrió correctamente
cout << "Archivo "<< !fs.is_open()?"NO ":"" << "abierto" << endl;
fs.write((char*)&data, sizeof(data));
cout << "WRITE = " << fs.good() << endl; // Me imprime 1
fs.read((char*)&d2, sizeof(d2));
cout << "READ = " << fs.good() << endl; // Me imprime 0 !!!!
// Al fallar la operacion de lectura, la siguiente linea imprime basura
cout << "Data : (" << d2.x << ", " << d2.c << ", " << d2.y << ")" << endl;
fs.close();
Como verán el programa solo sirve para refrescarme la memoria, sin
embargo no doy con el error. Quizá conceptualmente estoy errando en
algo, o simplemente olvido invocar algún metodo entre los citados.
De todas maneras ese programa no sirve, tiene un error. Y es por eso
que les pediria que me den una mano indicandome que modificar y porque
hacerlo.
--
Saludos y gracias.
Más información sobre la lista de distribución Cconclase