Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/01/2005, 08:02
Znet
 
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.-