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 :

lecture de fichier en mémoire


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 29
    Par défaut lecture de fichier en mémoire
    Bonjour,

    Pour obtenir un fichier en mémoire, est-ce suffisant de l'appeler dans le nom d'une fonction comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    afficheFichierEnCours(ifstream &f)
    {
       cout << g.getline(ligne, 2) << endl;
     
    }
    Est-ce que l'on peut dire que f est un fichier présentement ouvert par l'utilisateur ?

    Est-ce qu'il me manque quelque chose ?

    J'ai aussi vu ce genre d'exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ifstream in;
    in.open("fichier.txt",ifstream::in);
    cout << in.get();
    Est-ce aussi valide ?


    merci !

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    L'idéal, dans une optique RAII (Ressource Acquisition Is Initialisation), est de toujours utiliser le constructeur de *fstream en lui fournissant le nom du fichier, de manière à ce que le fichier en question soit systématiquement ouvert de manière automatique.

    Ainsi, on préférera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::ifstream ifs("MonFichier.txt");
    voir, si le nom du fichier est fourni par une variable de type std::string définie par ailleurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::ifstream ifs(filename.c_str());
    à quelque chose qui serait proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::ifstream ifs;
    ifs.open("MonFichier.txt");
    voire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    std::ifstream ifs;
    ifs.open(filename.c_str());
    (tu remarquera qu'il est inutile de rajouter le deuxième argument ifstream::in, pour la simple et bonne raison que i*stream est, quoi qu'il arrive, un flux entrant (Input File Stream) )

    Cependant, il reste tout à fait valide de faire appel à la fonction open, si, d'aventure, tu n'a aucun moyen de connaitre le nom du fichier au moment où tu déclare ta variable dont le type est un flux (quoi que l'on pourrait faire remarquer que tu la déclare peut être trop tôt, à moins qu'il ne s'agisse d'une variable qui est membre d'une classe )

    Par contre, si tu utilise un fichier "texte" (bien que le terme soit mal choisi, par opposition au terme, tout aussi mal choisi "binaire") et que l'idée est de lire toute une ligne du fichier d'un seul coup, il est largement préférable d'utiliser la fonction libre getline, qui prend comme premier argumment le flux à lire et comme second une chaine de caractères dans laquelle mettre le résultat de la lecture, car elle est au final bien plus paramétrable et plus simple à utiliser.

    Ceci dit, le code
    est tout à fait valide, simplement, la fonction membre get() renvoie... la valeur d'un caractère unique (du premier caractère à récupérer dans le fichier, en l'occurrence)...

    Ce peut être intéressant dans certaines circonstances, mais, encore une fois, ce n'est vraiment pas ni ce qu'il y a de plus efficace, ni ce qu'il y a de plus utile

    Je ne peux décemment pas répondre à ta question sans indiquer le fait qu'il existe une section entière de la FAQ dédiée aux entrées / sorite avec les flux(dont, tout une sous section dédiée exclusivement à la manipulation des fichiers)...

    Ces sections devraient t'apporter une réponse à la plupart des questions que tu te pose, et, sans doute même à certaines questions qui ne t'ont peut être pas encore effleuré
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Seabast888 Voir le message
    Pour obtenir un fichier en mémoire, est-ce suffisant de l'appeler dans le nom d'une fonction comme ceci :
    Bonjour,
    Pour ouvrir un fichier, il faut comme le dit Koala donner le nom du fichier lors de l'appel du constructeur ou si cela n'est pas fait à ce moment, explicitement avec open.
    Cependant, on ne dit pas que le fichier est 'en mémoire' mais bien qu'il est ouvert et disponible pour la lecture/écriture. C'est l'O.S. qui s'occupera tout seul de monter en mémoire le fichier ou les parties de fichier en fonction de ce que demandera ton programme.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une lecture de fichier midi qui consomme trop de mémoire
    Par padodanle51 dans le forum Général Java
    Réponses: 6
    Dernier message: 12/04/2008, 11h52
  2. [Ifstream] Lecture fichier et mémoire
    Par michaeljeru dans le forum SL & STL
    Réponses: 4
    Dernier message: 28/01/2008, 21h57
  3. [AS400][Intranet][PC] Lecture de "fichiers" AS400
    Par lando dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 16/07/2003, 11h11
  4. Lecture de fichier
    Par Watcha dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 04/03/2003, 20h43
  5. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 09h43

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