[C con Clase] Retroceder el puntero en archivo binario

Salvador Pozo salvador en conclase.net
Sab Jul 5 22:20:06 CEST 2008


El pasado 2008-07-04 15:08:55, Carolina Herrera escribió:
 
CH> Ya modifiqué el programa y aún sigue sin funcionar =(, como que ya empiezo a resignarme y usar el modo convencional (contando registros).

Hola:

No deberías resignarte, el método propuesto debería funcionar. Debe existir un error, y hay que encontrarlo.

Puedes probar con este programa de ejemplo:
----8<------
#include <cstdio>
#include <cstring>

using namespace std;

int main()
{
    FILE *fs;
    char car[12];
    int i;

    fs = fopen("pruebas.dat", "wb");
    fprintf(fs, "abracadabra");
    fclose(fs);

    fs = fopen("pruebas.dat", "r+b");

    while(!feof(fs)) {
        fseek(fs, 0, SEEK_CUR);
        fread(car, sizeof(char), 1, fs);
        if(car[0] == 'a') {
            fseek(fs, -sizeof(char), SEEK_CUR);
            car[0] = 'e';
            fwrite(car, sizeof(char), 1, fs);
        }
    }

    fclose(fs);

    fs = fopen("pruebas.dat", "r");
    fgets(car, 12, fs);
    printf("cadena: %s\n", car);
    fclose(fs);

	return 0;
}
----8<------

A ver si funciona, y en caso contrario podremos echar la culpa al compilador.

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase