Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/06/2007, 15:05
pitukilloloco
 
Fecha de Ingreso: mayo-2006
Mensajes: 40
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Problema con busqueda en ficheros binarios en C

Hace mucho tiempo puse un ejemplo simple en este foro http://foros.solocodigo.com/index.ph...531&hl=archivo de cómo dar de alta, de baja y modificar registros en un archivo usando las funciones de la librería estandar de C stdio.
En el ejemplo realmente no doy de baja los registros, sino sólo les pongo una marca que me indican que ya no están disponibles. Me parece que haces lo mismo según pude ver en lo que pusiste, aunque no estoy seguro. ¿Es esto lo que estás haciendo en tu programa? ¿sólo los marcas para indicar que están borrados? ¿cuál es el problema con estas funciones que pusiste? ¿no escriben esa marca?

Vi que buscas secuencialmente el archivo que quieres borrar en un ciclo for y te mueves en el archivo con estas instrucciones:
Código:
fseek(canal2,i*sizeof(struct venta),SEEK_SET);
fread(&v,sizeof(struct venta),1,canal2);
pero aquí la instrucción fseek no es necesaria, ya que fread incrementa el apuntador al archivo en cada iteración para apuntar al siguiente registro. En el ejemplo que te comento también busco secuencialmente el registro que quiero borrar y, al encontrarlo, uso la función fseek para regresar el apuntador del archivo a que apunte de nuevo al registro encontrado mandándole un número negativo en el segundo argumento de tamaño igual al registro, y poniendo en el tercer argumento el modificador SEEK_CUR, o sea, algo como esto
Código:
fseek (globfp, -1L * sizeof (a), SEEK_CUR);
fwrite (&a, sizeof (a), 1, globfp);
aunque la forma en que tú lo haces también me parece correcta y no creo que ahí esté el error.