Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Crear Archivo de texto y escribir en el

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Crear Archivo de texto y escribir en el Responder citando

Hola a todos:

Tengo claro (o eso creo) cómo abrir un archivo de texto:

Archivo.open(Nombre, ios::in|ios::out|ios::ate);
if (!ArchivoLOG)
ShowMessage("Fallo escritura");

donde Nombre es un *char.

Tengo claro cómo escribir en el

Archivo.write((char *)&Anotacion, sizeof(Anotacion));
if (!Archivo)
ShowMessage("Fallo escritura");

Creo que sé cómo crearlo:
TFileStream(NombreArchivo, fmCreate);
dónde NombreArchivo es un AnsiString.

Sé hacer todas esas cosas por separado, pero mi problema es que no sé juntarlas.

Para poder crearlo, primero tengo que intentar abrirlo, al darme ese mensaje de error porque no existe, es entonces cuando me permite crearlo. No soy capaz de crearlo directamente desde cero.
Lo creo, pero a partir de ahí no consigo cerrarlo, intento escribir algo en él, pero como está abierto de forma incorrecta no puede.
La única manera que encuentro de hacerlo es cerrar el programa, el fichero se libera y como ya está creado, ya puedo abrirlo correctamente y escribir en él.

¿Alguien me puede ayudar con este lío que tengo en la cabeza?

Gracias y un saludo.
JC
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

usa para grabar:

TstringList * p = new TStringList ;
p->Add("Hola ...");
p->Add(" Puntaje = " + IntToStr( 123) );
p->SaveToFile( "c:\\Archivo.txt");
delete p;

usa para leer:

TstringList * p = new TStringList ;
p->LoadFromFile( "c:\\Archivo.txt");
for( int x=0; x< p->Count; x++)
{ Memo1->Lines->Add( p->Strings[x]);
//Se lee cada linea del fichero de texto como si fuese un array en la propiedad Strings
}
delete p;
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Nada, sigo teniendo problemas:

Necesito comprobar si existe un archivo, crearlo si no existe y después poder escribir en él.

1º) Compruebo si el archivo existe, porque si existe no quiero machacar todo lo que tenga escrito.
// calculo nombre del archivo
strcpy(Nombre, NombreArchivo.c_str());
// Abro el archivo
ArchivoLOG.open(Nombre, ios::in|ios::out|ios::ate);
// Si no lo puedo abrir
if (!ArchivoLOG)
{
ShowMessage("Fallo escritura");
}

2º) En caso de no existir lo creo:
// Abro el archivo
ArchivoLOG.open(Nombre, ios::in|ios::out|ios::ate|ios::trunc);
// Si no lo puedo abrir
if (!ArchivoLOG)
ShowMessage("Fallo escritura");

Aquí ya me da error en caso de haber hecho la comprobación anterior (la del punto 1). Es decir, si esto es lo primero que hago, me lo crea bien y despues puedo escribir con la siguiente sentencia:

3º) // por ejemplo
strcpy(Anotacion.FechaAnotacion, Cadena_Fecha.c_str());
strcpy(Anotacion.Retorno, x.c_str());
ArchivoLOG.write((char *)&Anotacion, sizeof(Anotacion));

pero si lo que hago es la comprobacion del primer punto, ni puedo habrirlo con la del 2º punto, ni puedo escribir despues. Incluso cerrando el archivo con ArchivoLOG.close(); ( aunque no se para que hago esto si el arvhivo no existe todavía).

He probado tambien lo que me dice cecito pero me pasa lo mismo. Se graba bien el texto, aunque machaca lo que hubiera en el archivo, pero vuelvo a estar en las mismas: No puedo "cerrar" el archivo, o si lo cierro, no puedo tomar el control desde la rutina del punto 1º) y escribir con la del punto 3º).

He probado tambien con una sentencia del tipo:
FILE *in;
in = fopen(Nombre, "a");
fclose(in);

Y nada, me crea el archivo, pero ni puedo usar la sentencia 1º) ni la 3º). NO puedo escribir en el a no ser que cierre mi programa y lo vuelva a arrancar, ya con el archivo creado.

A ver si alguien me puede ayudar, por favor, es muy urgente.
Gracias y un saludo
Volver arriba
Mensaje    Asunto: Responder citando

TStringList * p = new TStringList ;
if( FileExists("c:\\Archivo.txt"))
{
p->LoadFromFile( "c:\\Archivo.txt");
}
p->Add("Hola ...");
p->Add(" Puntaje = " + IntToStr( 123) );
p->SaveToFile( "c:\\Archivo.txt");
delete p;

Te recomiendo aprenderte el tipo TStringList y con esto vas a poder manipular muchos controles del builder

TComboBox->Items del Tipo TStringList
TListBox->Items del Tipo TStringList
TMemo->Lines del Tipo TStringList
TRitchEdit->Lines del Tipo TStringList

Cuando cargas los datos con LoadFromFile todo se lleva a la memoria
ahi manipulas, agregas borras y luego lo vuelves a grabar sobre el orininal
pero si aun no te convence mejor usa el tipo de datos "fstream" del c++
en la libreia fstream.h

fstream f("c:\\Archivo.txt", ios::in|ios::out);
int x = 10;
f<<"Hola Gente"<<"mi edad"<<endl<<"es igual a"<<x;
f<<"Facil de usar";
f.close();
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.