¿Fseek () mueve el puntero del archivo al comienzo del archivo si se abrió en modo "a + b"?
Deseo abrir un archivo usando el modo "a + b", es decir, si no existe, se crea automáticamente, pero si lo hace, no quiero sobrescribirlo. Quiero poder leer y escribir en el archivo.
l archivo es binario y quiero guardar registros de un @ específistruct
en eso. Entonces quiero hacerfseek()
al registro que quiero y luego guardar el registro usandofwrite()
.
El código tiene el siguiente aspecto MyRecord
es untypedef
a unstruct
, mientrasFILENAME
es un#define
al nombre del archivo):
int saveRecord(MyRecord *pRecord, int pos)
{
FILE* file = fopen(FILENAME, "a+b");
if (file == NULL)
{
printf("Unable to open file %s\n", FILENAME);
return 0;
}
fseek(file, pos * sizeof(MyRecord), SEEK_SET);
fwrite(pRecord, sizeof(MyRecord), 1, file);
fclose(file);
return 1;
}
in embargo, este código solo agrega el registro al final del archivo, incluso si configuropos
a 0. ¿Por qué no esfseek()
conSEEK_SET
trabajando en modo agregar?
Sé que simplemente puedo abrirlo con "r + b" y, si falla, abrirlo con "wb", pero quiero saber por qué esto no funciona y por quéfseek()
conSEEK_SET
deja el puntero del archivo al final. Se aprecia cualquier referencia a lugares donde se documenta este comportamiento (porque no pude encontrar ninguna o estoy usando las palabras clave incorrectas).