Discussion:
Error con archivos
(demasiado antiguo para responder)
ejbm
2004-02-23 08:34:11 UTC
Permalink
Al ejecutar el siguiente procedimiento obtengo este error del sistema
operativo: Bad memory image of FAT detected

El procedimiento es el tipico algoritmo para obtener un archivo con
los registros no borrados de otro. Da el error al escribir en el
archivo aux.
El error que genera aparte del de sistema operativo es Permission
denied. Tengo permisos de administrador en la máquina en la que
trabajo.


void compactar(FILE *archivo, FILE * aux)
{
tipo_cliente cliente;

archivo = fopen("c:/tc/ejemplos/archivo.dat","rb+");
aux = fopen("c:/tc/ejemplos/aux.dat","w");
fseek(aux,0L,0);
while (!feof(archivo))
{
if (fread(&cliente,sizeof(tipo_cliente),1,archivo))
if (!cliente.borrado)
{
fwrite(&cliente,sizeof(tipo_cliente),1,aux);
perror("Fallo ");
exit(0);
}
}
fclose(archivo);
fclose(aux);

unlink("c:/tc/ejemplos/archivo.dat");
rename("c:/tc/ejemplos/aux.dat","c:/tc/ejemplos/archivo.dat");
}

Un saludo
Julián Albo
2004-02-23 15:58:10 UTC
Permalink
Post by ejbm
void compactar(FILE *archivo, FILE * aux)
¿Para qué los pasas como parámteros si los abres y cierras dentro de la
función?
Post by ejbm
archivo = fopen("c:/tc/ejemplos/archivo.dat","rb+");
aux = fopen("c:/tc/ejemplos/aux.dat","w");
¿No compruebas si se abrieron o no? Yo miraría eso antes de nada, si no
el error que te de después puede que no sea muy real.

Salu2
Aitor Cuesta Carranza
2004-02-23 19:28:59 UTC
Permalink
No se por que creo que estas programando en windows y has metido la pata con
los backslash.
cuando pones:
archivo = fopen("c:/tc/ejemplos/archivo.dat","rb+");
deberias poner:
archivo = fopen("c:\\tc\\ejemplos\\archivo.dat","rb+");

Espero q te ayude eso.

Suerte
Post by ejbm
Al ejecutar el siguiente procedimiento obtengo este error del sistema
operativo: Bad memory image of FAT detected
El procedimiento es el tipico algoritmo para obtener un archivo con
los registros no borrados de otro. Da el error al escribir en el
archivo aux.
El error que genera aparte del de sistema operativo es Permission
denied. Tengo permisos de administrador en la máquina en la que
trabajo.
void compactar(FILE *archivo, FILE * aux)
{
tipo_cliente cliente;
archivo = fopen("c:/tc/ejemplos/archivo.dat","rb+");
aux = fopen("c:/tc/ejemplos/aux.dat","w");
fseek(aux,0L,0);
while (!feof(archivo))
{
if (fread(&cliente,sizeof(tipo_cliente),1,archivo))
if (!cliente.borrado)
{
fwrite(&cliente,sizeof(tipo_cliente),1,aux);
perror("Fallo ");
exit(0);
}
}
fclose(archivo);
fclose(aux);
unlink("c:/tc/ejemplos/archivo.dat");
rename("c:/tc/ejemplos/aux.dat","c:/tc/ejemplos/archivo.dat");
}
Un saludo
ejbm
2004-02-24 11:37:23 UTC
Permalink
Es igual ponerlo de una forma que de la otra. El funcionamiento es el mismo

Muchas gracias
Post by Aitor Cuesta Carranza
No se por que creo que estas programando en windows y has metido la pata con
los backslash.
archivo = fopen("c:/tc/ejemplos/archivo.dat","rb+");
archivo = fopen("c:\\tc\\ejemplos\\archivo.dat","rb+");
Espero q te ayude eso.
Suerte
Post by ejbm
Al ejecutar el siguiente procedimiento obtengo este error del sistema
operativo: Bad memory image of FAT detected
El procedimiento es el tipico algoritmo para obtener un archivo con
los registros no borrados de otro. Da el error al escribir en el
archivo aux.
El error que genera aparte del de sistema operativo es Permission
denied. Tengo permisos de administrador en la máquina en la que
trabajo.
void compactar(FILE *archivo, FILE * aux)
{
tipo_cliente cliente;
archivo = fopen("c:/tc/ejemplos/archivo.dat","rb+");
aux = fopen("c:/tc/ejemplos/aux.dat","w");
fseek(aux,0L,0);
while (!feof(archivo))
{
if (fread(&cliente,sizeof(tipo_cliente),1,archivo))
if (!cliente.borrado)
{
fwrite(&cliente,sizeof(tipo_cliente),1,aux);
perror("Fallo ");
exit(0);
}
}
fclose(archivo);
fclose(aux);
unlink("c:/tc/ejemplos/archivo.dat");
rename("c:/tc/ejemplos/aux.dat","c:/tc/ejemplos/archivo.dat");
}
Un saludo
Loading...