[C con Clase] FSTREAMS, Estoy olvidado en algunos conceptos y uso

Listero Absoluto listeroabsoluto en gmail.com
Vie Abr 27 20:26:29 CEST 2007


Gracias por responder. Un par de preguntas.

1) fstream tiene un único cursor para lectura y escritura? es decir,
comparte uno solo o tiene dos, uno para cada operacion?

2) Me encuentro con un problema: cuando el archivo existe, y gracias a
tu respuesta anterior, todo funciona perfectamente. Pero cuando no
existe:

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);

Lo abro para crearlo, luego lo cierro y por ultimo lo vuelvo a abrir
para lectura y escritura binaria. Sin embargo algo no funciona bien ya
que las operaciones de lectura y escritura subsecuentes no funcionan
retornando fs.good el valor 0.

Gracias de antemano.

El 27/04/07, Salvador Pozo <salvador en conclase.net> escribió:
> El pasado 2007-04-27 16:51:26, Listero Absoluto escribió:
>
> Hola:
>
> LA> Buenas.
> LA> Hace rato que no uso esta clase y luego de mi "tour" por varios
> LA> lenguajes... estoy muy olvidado de como usarla y tengo un par de
> LA> preguntas:
>
> Veamos.
>
> LA> Si defino una estructura, por ejemplo:
> LA> typedef
> LA> struct SData
> LA> {
> LA>     int x;
> LA>     char c[50];
> LA>     float y;
> LA> };
>
> En C++ no es necesario usar typedef para definir tipos a partir de estructuras, puedes prescindir de esa palabra.
> LA> ...
> LA>     cout << "WRITE = " << fs.good() << endl; // Me imprime 1
> LA>     fs.read((char*)&d2,  sizeof(d2));
> LA>     cout << "READ = " << fs.good() << endl; // Me imprime 0 !!!!
> LA>     // Al fallar la operacion de lectura, la siguiente linea imprime basura
> LA>     cout << "Data : (" << d2.x << ", " << d2.c << ", " << d2.y << ")" <<
> LA>...
> LA> Como verán el programa solo sirve para refrescarme la memoria, sin
> LA> embargo no doy con el error.
>
> El error es simple.
>
> Después de la operación de escritura, el cursor o puntero del fichero queda situado al final del fichero, por lo que la operación de lectura fallará, ya que no hay nada que leer.
>
> Para que funcione tendrás que cambiar la posición del cursor, usando por ejemplo, el método "seekg".
>
> Hasta pronto.
>
> --
> Salvador Pozo (Administrador)
> mailto:salvador en conclase.net
> _______________________________________________
> 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
>


-- 
Saludos y gracias.




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