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.¿Hace fseek() mover el puntero del archivo al principio del archivo si se abrió en el modo "a + b"?
El archivo es binario y quiero guardar registros de un struct
específico en él. Entonces quiero hacer fseek()
en el registro que quiero y luego guardar el registro usando fwrite()
.
El código es el siguiente (MyRecord
es una typedef
a un struct
, mientras FILENAME
es una #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;
}
Sin embargo, este código sólo añade el registro al final del archivo, incluso si configuré pos
en 0. ¿Por qué no está fseek()
con SEEK_SET
trabajando en modo de adición?
Sé que puedo simplemente abrirlo con "r + b" y si falla abrirlo con "wb", pero quiero saber por qué esto no funciona y por qué fseek()
con SEEK_SET
deja el puntero del archivo en el fin. Se apreciaron todas las referencias a lugares donde se documentó este comportamiento (porque no pude encontrar ninguno, o estoy usando las palabras clave incorrectas).
Gracias, la respuesta que necesitaba. – jbx