Alguien sabe dónde está el error????????

Sonia
24 de Julio del 2003
Quiero guardar un string llamado S1 en un fichero de tipo binario. Debo hacerlo desde C++Builder 5 y necesito usar FStream.h.

Supuestamente, al tratarse de un string, debería introducir, en primer lugar, el tamaño que este tiene y después, incluir la palabra en sí, para que a la hora de sacar el string se sepa que tamaño tiene.

Yo ejecuto el siguiente código en el cpp, y aunque parece que todo va bien, no guarda nada en el fichero.

En la cabecera pongo:
#include <FStream.h>

y luego:

fstream F;

F.open("Fichero1", ios::in|ios::binary);

if (!F)
{
ShowMessage("No es posible abrir el fichero");
throw;
}
String S1 = Edit1->Text;

int L1;

L1 = (S1.Length()) + 1;

char C1[500];

strcpy(C1, S1.c_str());

F.write((char*)&L1, sizeof(L1));
F.write(C1, sizeof(char)*L1);

if (!F)
{
ShowMessage("Fallo en la escritura");
}

F.close();


Si alguien encuentra algo raro o tiene algún comentario, agradecería mucho que lo expusiese.
Gracias.

chuidiang
24 de Julio del 2003
No he manejado nunca un fstream, siempre lo hago con las funciones de C.

¿Para uno de escritura se utiliza ios::in?. Por intución yo usaría ios::out (un fichero de escritura es un fichero de salida, no de entrada).

Imagino que F.write() devuelve un -1 en caso de error o el numero de bytes que realmente se han escrito en el fichero (suele ser lo habitual). Puedes comprobarlo para ver si todo va bien.

Cuando dices que no escribe nada en el fichero, ¿quieres decir que el fichero queda con tamaño cero o que cuando intentas leerlo con otro programa no lees nada? Quizas el problema esté en ese programa de lectura.

Se bueno.