IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Q: fichier+buffer (connaitre sa position dans un fichier)


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 219
    Points
    219
    Par défaut Q: fichier+buffer (connaitre sa position dans un fichier)
    voila mon probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    long p;
    char c;
     
    ifstream fichier;
     
    fichier.open("test2.txt");// abc...xyz chaque lettre sur une ligne
     
     
    c = fichier.get(); //a
    c = fichier.get(); //\n
    c = fichier.get(); //b
    c = fichier.get(); //\n
     
    p = fichier.tellg();
     
    c = fichier.get(); //c
    c = fichier.get(); //\n
     
    fichier.seekg(p);
     
    c = fichier.get(); //?
     
    cout << c;
    Le cout affichera un peu ce qu'il veut, alors que je veux qu'il affiche c.
    J'aimerais savoir si il etait donc possible de connaitre notre position dans le fichier lors de sa manipulation? Et donc sauvegarder cette donnee pour l'utiliser plus tard affin de revenir a notre ancienne position.

    j'ai trouve deux solution pour m'eviter ce probleme, mais j'aimerais quand meme savoir si ce que je demande est possible.

    mes deux sol:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char mybuffer [10];
    fichier.rdbuf()->pubsetbuf(mybuffer,10);
    on force le buffer a 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    stringstream fichier;
    ifstream _fichier;
    _fichier.open("test2.txt");
    fichier << _fichier.rdbuf();
    on charge le fichier en memoire (merci la faq )

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    chez moi ton 1° code fonctionne.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 219
    Points
    219
    Par défaut
    mon code ne fonctionne pas chez moi :p (d'ou la question d'ailleurs)
    je suis sous xp et j'utilise dev-c++ 4.9.9.1

    en fait le fouarage dépend de ce qu'il y a dans le fichier et la taille qu'on donne au buffer. Tout peut tres bien aller puis hop a partir d'une taille de buffer donné ca rate.

    bref je sais pas tres bien ce que donne le tellg(), puisque ca a pas l'air de donner la position dans le fichier. Et je n'ose aps trop m'avancer avec ce qui est du buffer vu que je ne sais aps comment c est géré.

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    N'y aurait-il pas un problème quand la lecture initiale est arrivée en fin de fichier, et donc qu'elle a positionné un flag d'erreur ? Si oui, un appel à fichier.clear() pourrait aider.

    En outre, qu'est-ce que te fais croire que tellg retourne un long ? Le type à utiliser en théorie est streampos (mais je ne sais pas si ça joue ici...).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 219
    Points
    219
    Par défaut
    En outre, qu'est-ce que te fais croire que tellg retourne un long ? Le type à utiliser en théorie est streampos (mais je ne sais pas si ça joue ici...).
    je viens d essayer avec streampos et ca change rien
    sinon le long vient de la doc cplusplus.com
    tellg() and tellp()
    These two member functions admit no parameters and return a value of type pos_type (according ANSI-C++ standard) that is an integer data type representing the current position of get stream pointer (in case of tellg) or put stream pointer (in case of tellp).
    [/code]

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par zoonel
    bref je sais pas tres bien ce que donne le tellg()
    ben le mieux est de vérifier.

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/05/2014, 13h09
  2. Réponses: 4
    Dernier message: 05/07/2010, 13h25
  3. Réponses: 4
    Dernier message: 25/01/2010, 16h07
  4. [VBA-E]Ecrire dans un fichier sans l'ouvrir (ou dans un fichier invisible)
    Par bandit boy dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 29/05/2006, 17h14
  5. [Win32] Position dans un fichier
    Par vecchio dans le forum Windows
    Réponses: 7
    Dernier message: 22/03/2004, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo