if ( reg_b.id_reg == ID )
break;
}
+ /* Estoy parado sobre el punto id/registro que debo borrar */
printf("registro borrado= %ld en bloque = %d\n",reg_b.id_reg,reg_b.block);
/*justifico en archivo a la izquieda*/
- while ( !feof(f_block_reg) ){
- cant = fread(&buffer,sizeof(BLOCK_REG_T),10,f_block_reg);
- fseek(f_block_reg, -cant*sizeof(BLOCK_REG_T)-1, SEEK_CUR);
- for (i=0; i<cant; i++){
- fwrite(&buffer[i],sizeof(BLOCK_REG_T),1,f_block_reg);
- if ( feof(f_block_reg) ) continue;
+
+ /* GAZER : aca hago una prueba */
+ {
+ long final, actual;
+ actual = ftell(f_block_reg); /* Guardo la posicion actual */
+ fseek(f_block_reg, 0, SEEK_END); /* me voy al final */
+ final = ftell(f_block_reg); /* veo cuando ocupa el archivo */
+ fseek(f_block_reg, actual, SEEK_SET); /* vuelvo al lugar desde donde quiero justificar */
+
+ cant = (final-actual)/sizeof(BLOCK_REG_T);
+ for(i=0; i<cant; i++) {
+ /* Calculo donde empieza el proximo elemento a mover */
+ final = actual+sizeof(BLOCK_REG_T);
+ /* Me paro en ese lugar */
+ fseek(f_block_reg, final, SEEK_SET);
+ /* y lo leo */
+ fread(buffer, sizeof(BLOCK_REG_T), 1, f_block_reg);
+
+ /* Ahora me paro en la nueva posicion de este item */
+ fseek(f_block_reg, actual, SEEK_SET);
+ /* y lo guardo */
+ fwrite(buffer, sizeof(BLOCK_REG_T), 1, f_block_reg);
+
+ /* Ahora el proximo item va en la posicion siguiente */
+ actual += sizeof(BLOCK_REG_T);
}
- if ( feof(f_block_reg) ) continue;
- fseek(f_block_reg, sizeof(BLOCK_REG_T), SEEK_CUR);
+
}
-
/*trunco el ultimo registro del archivo
fseek(f_block_reg,0,SEEK_END);
truncate(name_f_block_reg,ftell(f_block_reg)-sizeof(BLOCK_REG_T));