[ Foro de C ]

Ficheros binarios

05-Mar-2023 18:20
Invitado (Flow)
1 Respuestas

Buenas, necesito saber como puedo modificar un parametro que se encuentra en un array de un struct dentro de un fichero binario. Debo acceder al fichero y revisar el struct entero con el objetivo de ver si un parametro es inferior a 4, cambiar otro. Llevo varios dias intentadolo hacer y no me funciona.


14-Mar-2023 21:31
Invitado (Alejandro Andrade)

Para modificar un parámetro que se encuentra en un array de un struct dentro de un fichero binario, debes seguir los siguientes pasos:

1. Abrir el fichero binario en modo lectura y escritura usando la función fopen().
2. Leer el struct del fichero binario usando la función fread() y almacenarlo en una variable.
3. Verificar si el parámetro que quieres modificar es menor que 4. Si es así, modifica el otro parámetro que deseas cambiar.
4. Vuelve a escribir el struct modificado en el fichero binario usando la función fwrite().
5. Cierra el fichero usando la función fclose().

Aquí te dejo un ejemplo de cómo podrías hacerlo:

#include <stdio.h>

struct ejemplo {
   int array[5];
   int parametro1;
   int parametro2;
};

int main() {
   FILE *archivo;
   struct ejemplo mi_struct;

   // Abrir el fichero binario en modo lectura y escritura
   archivo = fopen("mi_fichero.bin", "rb+");

   // Leer el struct del fichero binario
   fread(&mi_struct, sizeof(mi_struct), 1, archivo);

   // Verificar si el parámetro que quieres modificar es menor que 4
   if (mi_struct.array[2] < 4) {
       // Modificar el otro parámetro que deseas cambiar
       mi_struct.parametro2 = 100;
   }

   // Volver a escribir el struct modificado en el fichero binario
   fseek(archivo, 0, SEEK_SET);
   fwrite(&mi_struct, sizeof(mi_struct), 1, archivo);

   // Cerrar el fichero
   fclose(archivo);

   return 0;
}

Ten en cuenta que este es solo un ejemplo y que debes adaptarlo a tus necesidades específicas. También es importante asegurarte de que el tamaño de la estructura que estás leyendo y escribiendo sea el mismo en ambos casos para evitar problemas de compatibilidad entre diferentes sistemas o compiladores.






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