[ Foro de C ]

Modificacion de un Archivo Secuencial Indexado

27-Mar-2023 02:19
Invitado (estudiante_Programacion)
0 Respuestas

Hola, tengo una duda con respecto a la modificacion de un archivo secuencial indexado, Ya que necesito modificar dicho programa y lo he intentado y no funciona, ya que se modifica el archivo principal pero no el archivo de indices, como haria para que quede actualizado tanto el archivo de indices como el archivo principal que contiene los datos que cuando vuelva a buscar el archivo ya modificado salga el dato correcto, espero puedan ayudarme aqui dejo lo que he hecho hasta ahora a ver si alguien me puede ayudar



typedef struct{      // Archivo  Principal
int cedula;   // campo clave
       char nombre[20];
char apellido[20];
}Datos;

typedef struct{   // tabla indice Archivo
int cedula; // campo clave
long posicion;
}indice;

// Funcion para Registrar una persona

void RegistrarPersona(){
FILE *archivo;
FILE *archIndice;
Datos persona;
indice indPersona;
long posicion;

archivo= fopen("personas.dat", "ab");
archIndice = fopen("indice_personas.dat", "ab");


if(archivo==NULL || archIndice==NULL){
printf("Error al abrir el archivo");
return;
}

//pedir al usuario que ingrese los datos de las personas

printf("\nIngrese la cedula:");
scanf("%d", &persona.cedula);
printf("\nIngrese el nombre: ");
scanf("%s", persona.nombre);
printf("\nIngrese el apellido: ");
fflush(stdin);
scanf("%s", persona.apellido);

//Escribir los datos de la nueva  persona en el archivo principal
fwrite(&persona, sizeof(Datos),1,archivo);

// Obtener la posición en el archivo del registro de personas
        posicion = ftell(archivo) - sizeof(Datos);


// Escribir el nuevo índice en el archivo de índices
       indPersona.cedula = persona.cedula;
   
       indPersona.posicion= posicion;
       fwrite(&indPersona, sizeof(indice), 1, archIndice);
   
       fclose(archivo);
      fclose(archIndice);
   
      printf("\nPersona Registrada.");
   
   system("pause");
system("cls");
}

El problema surgue cuando el usuario ingresa un numero de cedula a modificar y se que hay que hacer otra funcion para buscar en el archivo y cuando encuentre esa cedula pregunte que dato quiere modificar , ingresa otra vez los datos, la pregunta es ¿ como sobreeescribo el archivo principal y actualizo el archivo indice? que cuando busque el nuevo dato modificado se encuentre con dicho numero de cedula modificado pro ejemplo... gracias!






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)