Ne fseek() déplace le pointeur de fichier au début du fichier si le fichier a été ouvert en “a+b” mode?

Je veux ouvrir un fichier à l'aide de la "a+b", c'est à dire si elle n'existe pas, il est créé automatiquement, mais si c'est le cas je ne veux pas le remplacer. Je veux être capable de lire et d'écrire dans le fichier.

Le fichier est binaire, et je veux sauver les enregistrements d'un spécifique struct. Alors je veux faire fseek() à l'enregistrement que je veux et ensuite l'enregistrer à l'aide de fwrite().

Le code se présente comme suit (MyRecord est un typedef à un struct, tandis que FILENAME est un #define le nom du fichier):

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;
}

Toutefois, ce code ajoute l'enregistrement à la fin du fichier, même si j'ai mis pos à 0. Pourquoi n'est-ce pas fseek() avec SEEK_SET de travail en mode ajout?

Je sais que je peux simplement ouvrir avec "r+b", et s'il ne l'ouvrir avec "wb", mais je veux savoir pourquoi cela ne fonctionne pas et pourquoi fseek() avec SEEK_SET est en laissant le pointeur de fichier à la fin. Toutes les références à des endroits où ce comportement est documenté apprécié (parce que je ne pouvais pas trouver n'importe ou, je suis en utilisant le mauvais mots-clés).

OriginalL'auteur jbx | 2011-04-03