2013-06-25 3 views
1

Je n'arrive pas à faire fonctionner cette fonction fseek() dans mon code. Le texte que j'ai écrit ne commence pas au point que j'indique et je ne sais pas pourquoi. Il devrait commencer à écrire depuis le \ n et écraser tout le fichier texte. Même si je l'ouvre avec a il ne va tout simplement pas où je commande à travers les paramètres.Le programme de fichiers - fseek ne fonctionne pas

fclose(file); 
    FILE *file_a = fopen("ex6.txt", "w"); 

    fseek(file_a, -1, SEEK_END); 

    puts("Write text to add:"); 
    while((letter = getchar()) != '\n') 
    { 
     fputc(letter, file_a); 
    }; 

Que se passe-t-il? Pourquoi ça ne marche pas?

+0

Si vous voulez la fin du fichier, je suppose que vous voulez passer '0' à fseek. -1 serait 1 octet avant la fin. –

+0

Essayez-vous d'insérer dans le fichier près de la fin plutôt que de simplement ajouter à la fin? –

+0

Désolé pour cette information. J'essaie d'ajouter du texte, disons 2 caractères avant la fin, alors imaginez c'est mon contenu de fichier: "bonjour \ 0" Je voudrais insérer des informations "hell | o \ 0", en remplaçant "o \ 0" et mettre là mon propre test comme "ouais" et le produit final serait: "ouais". Mais c'est comme si fseek ne correspondait pas à ce que je demande, même si je mets la référence en nombres positifs ... –

Répondre

1

La navigation en mode absolu ne fonctionne que lorsque le fichier est ouvert en mode binaire. Quand il est ouvert en mode texte, fseek() ne peut pas accéder aux positions absolues dans un fichier en dehors de 0 (le début du fichier), et essayer de le faire entraînera un comportement indéfini. Vous pouvez cependant accéder aux références dans le fichier renvoyé par ftell(). La raison de ceci est due à la manipulation de certains caractères par certains systèmes d'exploitation; certaines implémentations le permettent mais POSIX ne le mandate pas.

Je sais que vous avez résolu le problème dans les commentaires, c'est juste pour la fermeture.

Questions connexes