[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