Domingo 22 de Diciembre de 2024, 02:45
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
»
C++ Builder
(Moderador:
Eternal Idol
) »
Guardar Registros En C++
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Guardar Registros En C++ (Leído 4772 veces)
Solman
Miembro MUY activo
Mensajes: 151
Guardar Registros En C++
«
en:
Miércoles 16 de Agosto de 2006, 00:23 »
0
Miren este es mi problema . quiero crear un registro que en este caso es una clase asi:
class TItem{
private:
String name;
String apellido;
}
y ahora quiero guardarlo en un archivo digamos PRUEBA.txt y despues leerlo pero como hago eso. Tengo entendido que se usa fwrite y fread pèro ,al momento que hago fwrite todo sale bien , y al momento q leo pues no sale nada .. no se si es porque yo abro el archivo haci
fopen("PRUEBA.txt","a"); asi para agregar un registro y para leerlo asi:
TItem a;
FILE archivo;
fread(&a,sizeof(a),1,archivo);
medio extraño .. si pueden ayudarme haganlo porfavor.
Tweet
pilarm
Nuevo Miembro
Mensajes: 9
Re: Guardar Registros En C++
«
Respuesta #1 en:
Miércoles 16 de Agosto de 2006, 01:27 »
0
Hola..
Creo q tu problema radica porque el modo de apertura "a" lo posiciona en el ultimo registros, claro el te agrega bien porq estas en lo ultimo del archivo, pero cuando quieres leer no puedes porque ya no hay mas nada que leer
Puedes solucionarlo con el fseek, luego de escribir, posicionas el puntero en la primera posicion!!! o abrirlo en otro modo.
Espero te sirva!!!
Solman
Miembro MUY activo
Mensajes: 151
Re: Guardar Registros En C++
«
Respuesta #2 en:
Miércoles 16 de Agosto de 2006, 01:40 »
0
Mira pilar ya intente lo q me dijiste peroooo adivina NO SALE NADA
saben estoy trabajando en C++ Builder pero no funciona no se ya le aplique fseek(file,0L,SEEK_SET); y nada .. algun tio q sepa de esto??
TRod
Miembro MUY activo
Mensajes: 108
Nacionalidad:
Re: Guardar Registros En C++
«
Respuesta #3 en:
Miércoles 16 de Agosto de 2006, 04:27 »
0
Ya probaste lectura/escritura con "rb+" o "r+" ? podría funcionar...
Vatoicc
Miembro activo
Mensajes: 65
Re: Guardar Registros En C++
«
Respuesta #4 en:
Jueves 17 de Agosto de 2006, 04:46 »
0
Si estas programando en C++ builder, creo que seria mas facil usar un objeto TStringList
Código: Text
TStringList *Archivo = new TStringList();
//Puedes ir añadiendo linea a linea la informacion en el archivo
Archivo->Append( "primera linea" );
Archivo->Append( "segunda linea" );
Archivo->Append( "tercera linea" );
//Guardar le archivo
Archivo->SaveToFile( "c:\\Carpeta\\Prueba.txt" );
//Para abrir el archivo
Archivo->LoadFromFile( "c:\\Carpeta\\Prueba.txt" );
//Para leer todo el archivo
Archivo->Text; //te lo da como AnsiString todo el contenido del archivo
//Para leer linea a linea
Archivo->Strings[0]; //Primera linea
Archivo->Strings[1]; //Segunda llinea
Archivo->Strings[2]; //Tercera linea
//Liberar memoris
delete Archivo;
No se si sea la sintaxis correcta, por que no lo probe
pero ese seria el codigo mas o menos
La paranoia es una vision mas sutil de la vida
pilarm
Nuevo Miembro
Mensajes: 9
Re: Guardar Registros En C++
«
Respuesta #5 en:
Jueves 17 de Agosto de 2006, 04:47 »
0
No se como estas trabajando
pero lo unico que se me ocurre que pueda ser el problema es el modo de apertura.
deberias tener una funcion agregar y otra para leer, en la de agregar abres con el modo "a" y en el de leer lo abres "r"
Leete bien los modo de apertura, recuerda cerrar los archivos al final de cada funcion
Escribe si te funciona
y que error puede ser para ver en q se te puede ayudar
Solman
Miembro MUY activo
Mensajes: 151
Re: Guardar Registros En C++
«
Respuesta #6 en:
Jueves 17 de Agosto de 2006, 21:09 »
0
Pues miren aqui esta mi codigo para que lo observen y no funciona ... se malogra al momento que tiene que leer el archivo.
Código: Text
//EN MI UNIDAD UNI2.H ESTA ESTO
//---------------------------------------------------------------------------
#ifndef Unit2H
#define Unit2H
#include <vcl.h>
#include <stdio.h>
#include <ctype.h>
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
class ITem{
private:
String name;
String descripcion;
public:
ITem();
ITem(String n,String d);
String Getname();
String GetDescripcion();
};
class TNodo{
private:
ITem info;
TNodo *sig;
public:
TNodo(ITem v,TNodo *siguiente=NULL);
friend class TLista;
};
typedef TNodo *pNodo;
class TLista{
private:
pNodo L;
String name;
struct T{
String a;
String b;
};
public:
TLista();
void insertar(ITem v);
void mostrar(TListBox *l);
//archivos
void leer(TListBox *l);
};
//Y EN MI IMPLEMENTACION ES DECIR EN UNIT2.PP ESTA ESTO
#pragma hdrstop
#include "Unit2.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
ITem::ITem(){
name=""; descripcion="";
}
ITem::ITem(String n,String d){
name=n; descripcion=d;
}
String ITem::Getname(){
return name;
}
String ITem::GetDescripcion(){
return descripcion;
}
//---------------------------------------------------------------------------
TNodo::TNodo(ITem v,TNodo *siguiente){
info=v;
sig=siguiente;
}
//---------------------------------------------------------------------------
TLista::TLista(){
L=NULL;
name="";
}
void TLista::insertar(ITem v){
T copia;
FILE *archivo;
pNodo nuevo=new TNodo(v);
nuevo->sig=L;
L=nuevo;
copia.a=v.Getname();
copia.b=v.GetDescripcion();
archivo=fopen("Solman.txt","a");
fwrite(&copia,sizeof(copia),1,archivo);
fclose(archivo);
}
void TLista::mostrar(TListBox *l){
pNodo p;
p=L;
l->Clear();
while(p!=NULL) {
l->Items->Add(p->info.Getname());
p=p->sig;
}
}
void TLista::leer(TListBox *l){
T copia;
FILE *archivo;
l->Clear();
archivo=fopen("Solman.txt","rt");
fseek(archivo,0L,SEEK_SET);
fread(&copia,sizeof(copia),1,archivo);
l->Items->Add(copia.a);
fclose(archivo); <--- aqui sale error
}
Y me sale un error en el fclose(archivo) pero como q despues se arregla y normal
corre pero en el momento que pulso el botom q me muestre el primer registro
de el fichero Solman.txt pues no muestra nada .
Eso es cuando se unsa la funcion void TLista::leer(TListBox *l) esta funcion
es la que lee el primer registro .
Si alguien sabe pues corriganlo
Solman
Miembro MUY activo
Mensajes: 151
Re: Guardar Registros En C++
«
Respuesta #7 en:
Jueves 17 de Agosto de 2006, 21:31 »
0
Hoye vatoicc como hago para que con
TStringList *Archivo = new TStringList();
pueda ingresar en el archivo un registro y leerlo mmm
como le hago dime para que con eso pueda yo metr tantos registros quiera y los pueda sacar uno poruno ... registro me refiero a una structura o una clase.
Vatoicc
Miembro activo
Mensajes: 65
Re: Guardar Registros En C++
«
Respuesta #8 en:
Viernes 18 de Agosto de 2006, 00:23 »
0
Como te lo habia planteado en el codigo, con:
Código: Text
TStringList *Archivo = new TStringList();
solo estas creando un objeto tipo TStringList, que es igual al TString que usa el Memo
para almacenar las lineas, como en el block de notas.
Lo que te plantee, que es lo que yo hago en la mayoria de los casos, es que en tu arhcivo, guardes informacion, o registros, como le quieras llamar, solo que si son numericos, debes tener en cuenta, que TStringList maneja cadenas AnsiString.
Podria ser algo engorroso tener una variable tipo int y tener que usar la funcion IntToStr() para guardarlo en una linea del TStringList, pero para mi, es muy confiable.
No se exactamente que registros quieras guardar, (me da flojera revisar todo el codigo
) pero donde dices que te marca el error, recibes como parametro un TListBox, y creo que lo que quieres hacer es poner lo que esta en el arhcivo en el TListBox, si es asi, puedes hacer esto
Código: Text
void TLista::leer(TListBox *l)
{
l->Items->LoadFromFile("Solman.txt");
}
la parte que no entiendo es la de
T copia;
pero imagino que es una estructura que hiciste
La paranoia es una vision mas sutil de la vida
Solman
Miembro MUY activo
Mensajes: 151
Re: Guardar Registros En C++
«
Respuesta #9 en:
Viernes 18 de Agosto de 2006, 01:52 »
0
Muchas gracias he jeje si sale .. en cuanto a los registros me refiria a meter una estructura en el archivo
osea
struct a{
string a;
string b;
string con;
}
a L;
y ahora meter en el archivo L eso es lo q quiero y despues leerlo pero t metodo es bueno tb
eL_MoStRo
Nuevo Miembro
Mensajes: 18
Re: Guardar Registros En C++
«
Respuesta #10 en:
Viernes 18 de Agosto de 2006, 06:36 »
0
Hola me parece que el problema es que esas funciones fread y fwrite no soportan la clase String ni AnsiString, intenta poner tus atributos de la clase con cadenas char y veras que si funciona.
Espero y te sirva
Código: Text
class TItem{
private:
char name[10];
char apellido[10];
}
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
»
C++ Builder
(Moderador:
Eternal Idol
) »
Guardar Registros En C++