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

Tengo un par de problemas con C y archivos

Estas en el tema de Tengo un par de problemas con C y archivos en el foro de Programación General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 17/10/2004, 15:15
Avatar de Yashiro  
Fecha de Ingreso: mayo-2004
Mensajes: 139
Antigüedad: 20 años, 6 meses
Puntos: 0
Tengo un par de problemas con C y archivos

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 ..
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




La zona horaria es GMT -6. Ahora son las 23:39.