Partage
  • Partager sur Facebook
  • Partager sur Twitter

Bizarre le fseek

    5 décembre 2005 à 23:16:51

    Bonjour a tous,

    j'ai un petit soucis, en fait, mon prof de C m'a dit que si je faisais fseek(*pointeur, sizeof(structure), SEEK_END), le curseur allait se positionner a la fin du fichier. Logiquement si je fais après : fseek(*pointeur, sizeof(structure) * (-1), SEEK_CUR), il devrait reculer d'un enregistrement et si ensuite je fais un fread, il devrait lire les informations contenues dans le dernier enregistrement ... Ben non, il ne me lis pas le dernier enregistrement ... Pour qu'il le fasse, je suis obligé de faire ceci :

    IDclients = fopen("IDclients.bin", "rb+");

    fseek(IDclients, sizeof(ID), SEEK_END);
    fseek(IDclients, sizeof(ID) * (-2), SEEK_CUR);
    fread(&id, sizeof(ID), 1, IDclients);

    fclose(IDclients);


    j'ai mis le code qui importait, pas le reste ... Est-ce que quelqu'un comprend pourquoi je dois faire * (-2) ?
    • Partager sur Facebook
    • Partager sur Twitter
      6 décembre 2005 à 7:22:56

      Soit tu l'as mal entendu soit il t'a mal enseigné.
      C'est fseek(fp, -1 * sizeof (T), SEEK_END)
      si tu veux être à un enregistrement avant la fin donc à la position FIN - sizeof (T).
      • Partager sur Facebook
      • Partager sur Twitter
        6 décembre 2005 à 7:24:41

        Imagine que ton pointeur est une graduation sur une règle, et que tu as deux objets A et B qui font 15 cm chacun, côte à côte, et qui se rencontrent à la graduation '15 cm' (A : 0-15, B:15-30).

        Au départ tu es placé à cette graduation (IDclients).

        Tu lui dis, 'regarde la taille de l'objet dont j'indique le début (donc B), avance de la taille de B (donc 15) jusqu'à la fin de B.
        Il va donc aller se mettre sur la graduation '30'.

        Si ensuite tu lui dis "Recule de la taille de B", il va reculer de 15 cm, donc aller sur '15', c'est à dire revenir à sa position initiale !
        Si tu veux vraiment le début de A tu dois reculer de 30 cm (la somme des deux), donc mettre un 'x2'.

        L'autre solution, se serait de lui demander de reculer directement au début, quand tu es encore sur 15, avant de lui demander d'aller à la fin de B : je pense que si tu enlèves le premier fseek et que tu remets le 'x1' au deuxième, ca marche.
        • Partager sur Facebook
        • Partager sur Twitter
          6 décembre 2005 à 8:46:13

          Le mieux serait de savoir tout le temps combien tu as d'éléments dans ton fichier, de façon à pouvoir déplacer le pointeur de fichier du début jusqu'à l'élément voulu de façon simple.
          • Partager sur Facebook
          • Partager sur Twitter
            6 décembre 2005 à 15:41:58

            En fait je veux juste récupèrer la valeur de la dernière ligne du fichier, c'est pour cela que j'ai fait ceci, je vais essayer la solution de rz0 ...

            Merci d'avance

            Edit : Ben ca fonctionne aussi, merci rz0, je comprend mieux maintenant et merci bluestorm pour tes explications, c'est maintenant plus clair ;)
            • Partager sur Facebook
            • Partager sur Twitter

            Bizarre le fseek

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown