- /*busco el registro que tengo que eliminar*/
- if ( (f_block_reg = fopen(name_f_block_reg,"r+")) == NULL ) return -1;
- while ( !feof(f_block_reg) ){
- if ( fread(®_b,sizeof(BLOCK_REG_T),1,f_block_reg) != 1 ) continue;
- if ( reg_b.id_reg == ID )
- break;
- }
- fseek(f_block_reg, -sizeof(BLOCK_REG_T), SEEK_CUR);
- /* 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*/
-
- /* 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);
- }
-
- }
- /*trunco el ultimo registro del archiv*/
- fseek(f_block_reg,0,SEEK_END);
- size = ftell(f_block_reg);
- fclose(f_block_reg);
- truncate(name_f_block_reg,size - sizeof(BLOCK_REG_T));
-