Foros del Web » Programación para mayores de 30 ;) » Programación General »

PROBLEMAS CON ARCHIVOS EN C++ Builder

Estas en el tema de PROBLEMAS CON ARCHIVOS EN C++ Builder en el foro de Programación General en Foros del Web. Hola, tengo un problema con la funcion fread y fwrite para manejar los arhivos El primer problema era que usaba le metodo en fopen a+, ...
  #1 (permalink)  
Antiguo 19/01/2005, 08:02
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 1 mes
Puntos: 0
PROBLEMAS CON ARCHIVOS EN C++ Builder

Hola, tengo un problema con la funcion fread y fwrite para manejar los arhivos
El primer problema era que usaba le metodo en fopen a+, para poder escribir y mostrar el ultimo valor ingresado ya en teoria el puntero del archivo se ubica al final del mismo, pero lo que pasaba era que agrega 3 registros y no agrega mas, y por otro lado cuando uso la funcion fread, me lee el primer registro, a todo esto los 3 registros que se agregan (los unicos) son iguales.
A esto decidi solucionarlo usando dos punteros uno de escritura y otro de lectura con los metodos a y r.
Ahora si me escribe en el archivo perfectamente, el problema es que cuando uso el puntero de lectura me lee bien se situa al final del archivo pero lo hace bien hasta el 5 registro, y despues cuando sigo leyendo supongamos tengo 10 registros ya, me lee el 5.
A que se debe?
Aca dejo el codigo con la accion del boton



struct config //config.dat
{
int id;
char curso[30];
float prec_c;
float prec_m;
char mat[30];
int idmat;
};

void __fastcall TInsCur::Button1Click(TObject *Sender)
{
config aux,aux1;
FILE *f, *fa;
//Verificar que esten completos todos los campos.
if(Edit1->Text==""||Edit2->Text=="")
{
ShowMessage("Completar NOMBRE DEL CURSO y COSTO DEL CURSO");
}
else
{
f = fopen("C:\\WINDOWS\\Escritorio\\config.cd","a");
fa = fopen("C:\\WINDOWS\\Escritorio\\config.cd","r");
if(!f)
{ ShowMessage("El finchero no se puede abrir."); }
else
{
fread(&aux1, sizeof(aux1), 1, fa);
aux.id=aux1.id+1;
strcpy(aux.curso, Edit1->Text.c_str());
aux.prec_c=Edit2->Text.ToInt();
strcpy(aux.mat, Edit3->Text.c_str());
aux.prec_m=Edit4->Text.ToDouble();
fread(&aux1, sizeof(aux1), 1, fa);
aux.idmat=aux1.idmat+1;
fwrite(&aux, sizeof(aux), 1, f);

}
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
fread(&aux1, sizeof(aux1), 1, fa);
ShowMessage(aux1.prec_c);
fclose(f);
}
}
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #2 (permalink)  
Antiguo 19/01/2005, 12:30
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Perdona la crítica pero el código es bastante ilegible, si lo que queres es una función que lea todos los registros que existen en el archivo o uno en particular deberías hacer un bucle for que recorra el archivo.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 19/01/2005, 18:52
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 1 mes
Puntos: 0
Gracias, todas las criticas son buenas, estoy recien aprendiendo sobre c asi que todo lo positivo que puedan brindar será bienvenido.
Voy a probar con un for eternal y te comento, la verdad que descuide ese detalle.
SAlu2
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 03:52.