Estoy desarrollando una aplicacion tipo Cuentas por Cobrar, intento reabrir un descriptor de fichero como lectura y modificacion binaria, para poder modificar contenido con fseek(), puedo modificar el contenido x veces en tiempo de ejecucion, cuando estoy intentando la 3ra modificacion, entonces explota, pero he verificado las salidas de los descriptores y solo el descriptor que utiliza la funcion getPos() devuelve error, al parecer no pudo abrir el descriptor, pero a que se debe, he cerrado todos los ficheros correctamente, he colocado reposicionamiento al SET 0 de mi descriptor utilizando fseek(), pero nada todo igual.
La funcion getPos(), con esta funcion devuelvo la posicion fisica actual del fichero.
La funcion mntPagoClt(), la utilizo para sacar el ultimo pago que realizo el cliente.
De esta manera estoy abriendo los descriptores de fichero:
La funcion getPosFich(). Con esta funcion me posiciono en donde quiero en el descriptor
Nota: Todos los datos se alojan en un fichero, llamado fixcon.fix.
Código (c) [Seleccionar]
//codigo boton
posFich=getPos(cedulaPg);
getPosFich(posFich-1, modifFichero);
pagoActual=mntPagoClt(cedulaPg);
sumaPagada=sumar(mntPago, mntCount);
//suma de pago
pagoSumado=pagoActual-sumaPagada;
sprintf(usuario.deuda, "%i", pagoSumado);
//guardamos estructura de datos en fichero
fwrite(&usuario, sizeof(struct user), 1, modifFichero);
//cerramos fichero
fclose(modifFichero);
La funcion getPos(), con esta funcion devuelvo la posicion fisica actual del fichero.
Código (c) [Seleccionar]
int getPos(char *cedulaPago)
{
FILE *dato = fopen("fixcom.fix", "rb");
int pos=0;
//fseek(dato, 0L, SEEK_SET);
verificarFichero(dato,"dato");
while(fread(&usuario, sizeof(struct user), 1, dato)!=0)
{
pos++;
if(strcmp(cedulaPago, usuario.cedula)==0)
{
fclose(dato);
return pos;
}
}
}
La funcion mntPagoClt(), la utilizo para sacar el ultimo pago que realizo el cliente.
Código (c) [Seleccionar]
int mntPagoClt(char *cedula)
{
int prestamoD=0;
FILE *fichLeer=fopen("fixcom.fix", "rb");
while(fread(&usuario, sizeof(struct user), 1, fichLeer)!=0)
{
if(strcmp(cedula, usuario.cedula)==0)
{
fclose(fichLeer);
return prestamoD=atoll(usuario.deuda);
}
}
}
De esta manera estoy abriendo los descriptores de fichero:
Código (c) [Seleccionar]
modifFichero=fopen("fixcom.fix","rb+");//lectura binaria y para actualizar descriptor
fdiskR=fopen("fixcom.fix","rb");//leer el fichero completo hasta encontrar lo buscado con strcmp()
fdiskW=fopen("fixcom.fix","a"); //para guardar siempre en la ultima linea del fichero
La funcion getPosFich(). Con esta funcion me posiciono en donde quiero en el descriptor
Código (c) [Seleccionar]
void getPosFich(int pos, FILE *filePtr)
{
fseek(filePtr, pos*sizeof(struct user), SEEK_SET);
}
Nota: Todos los datos se alojan en un fichero, llamado fixcon.fix.