PROBLEMA No1
Problemas para actualizar...........
En esta tengo que actualizar una estructura contenida en un fichero, para esto realizao una
busqueda y si lo encuantra solicita el dato que desea modificar, actualiza la estructura en
el campo a modificar, y escribe en el archivo en con :
"fwrite(&persona,sizeof(persona)-1,1,puntero_fichero);"
Pero mi problema es que no lo actualiza ......
Esta es la funcion :
void modifica_estudiante(){
char person_busc[20]; //servira para comparar con strcmp
bool sennal=false; //indica si el dato pedido se modifico en la estructura
int dato_vari;
FILE *puntero_fichero;
puntero_fichero = fopen("estudiante_file.dat","a+b");
if (puntero_fichero == NULL) {
cout<<"Error al cargar el fichero"<<endl;
fclose(puntero_fichero);
}
else {
cout<<"Digite el nombrede la persona que desea modificar"<<endl;
cin>>person_busc;
fread(&persona,sizeof(persona),1,puntero_fichero);
do {
if(strcmp(persona.nombre,person_busc)==0){
bandera=1;
cout<<"Selecciona que seccion deseas modificar :"<<endl;
cout<<"-----------------0-----------------"<<endl;
cout<<"1....Nombre :"<<persona.nombre<<endl;
cout<<"2....Apellido :"<<persona.apellido<<endl;
cout<<"-----------------0-----------------"<<endl;
cout<<"Seleccion : ";
cin>>dato_vari;
if ((dato_vari<1) || (dato_vari>2)){
cout<<"Error al digitar el numero, seleccion uno entre 1 y 8";
sennal=true;
}
else if (dato_vari==1){
cout<<"Digite el nuevo nombre "<<endl;
cin>>persona.nombre;
sennal=true;
}
else if (dato_vari==2){
cout<<"Digite el nuevo apellido"<<endl;
cin>>persona.apellido;
sennal=true;
}
}
fread(&persona,sizeof(persona),1,puntero_fichero);
}while (!feof(puntero_fichero));
fwrite(&persona,sizeof(persona)-1,1,puntero_fichero);
fclose(puntero_fichero);
if(bandera!=0){
bandera=1;
}
else{
cout<<"No se Encontro el la persona"<<endl;
system("pause");
}
}
}
PROBLEMA No2
Problemas para Eliminar............
Esta funcion es con la que intento eliminar una persona (persona es una estructura
almacenada en el fichero : persona_file.dat) del fichero, en el cual leo el fichero
campo por campo y lo almaceno en un arreglo de estructuras menos el que se deseaba
eliminar, luego remuevo el fichero con la funcion "remove", despues creo un fichero
nuevo y paso todo el arreglo de estructuras a el y la almaceno;
Pero el problema esta en que no se elimina y no se por que??
//************************************************** *******************************
typedef struct {
char nombre[20];
char apellido[20];
}personas;
personas persona,aux[100]; //asumo que va a contener 100 estructuras
void elimina(){
char nom[20]; //variable del nombre a buscar
int count=0,limit; // con estos medire t trabajare el arrego aux
FILE *puntero_fichero;
puntero_fichero = fopen("persona_file.dat","a+b");
if (puntero_fichero == NULL) cout<<"Error al abrir el fichero";
else {
cout<<"Digite la persona que desea eliminar"<<endl;
cin>>nom;
rewind(puntero_fichero);
fread(&persona,sizeof(persona),1,puntero_fichero);
do {
if(strcmp(persona.nombre,nom)==0) {
bandera=1; //indica si el nombre fue encontrado
}
else {
aux[count]= persona; //voy llenando el arreglo con las estructuras contenidas en el fichero
}
fread(&persona,sizeof(persona),1,puntero_fichero);
count++;
}while (!feof(puntero_fichero));
limit=count; //defino el limite del arreglo
fclose(puntero_fichero);
remove("persona_file.dat");
FILE *puntero_fichero;
puntero_fichero = fopen("persona_file.dat","a+b");
count=0;
do {
persona=aux[count]; //asigna a la estructura un campo del arreglo (la informacion)
fwrite(&persona,sizeof(persona),1,puntero_fichero) ; //la escribe en el fichero
count++; //sube loa pocision del contador (para el arreglo)
}while (limit!=count);
}
fclose(puntero_fichero);
}
//************************************************** *******************************
Les agradeceria mucho su ayuda .....
Saludos y Gracias ..