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 :

manipulation de fichiers


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 19
    Par défaut manipulation de fichiers
    Bonjour.

    Je débute en c++ et malgré mes recherches je ne parviens pas à faire un trus très simple.

    J'ai une classe FichierProv dont voici le .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class FichierProv
    {
    private:
    	ofstream fichier;
    public:
    	FichierProv();
    	void add(string chaine);
    	void close();
    };
    Le constructeur permet de créer un fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    FichierProv::FichierProv()
    {
    	// Creation/écrasement du fichier
    	fichier("test.txt", std::ios::trunc);
     
    	if (!fichier)
    	{
    		std::cerr << "Erreur de creation du fichier" << std::endl;
    		exit 1;
    	}
    }
    La méthode add() permet d'ajouter une chaine à ce fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void FichierProv::add(string chaine)
    {
    	fichier << chaine << std::endl;
    }
    La méthode close permet de fermer ce fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void FichierProv::close()
    {
    	fichier.close();
    }
    Je rencontre une erreur dans le constructeur :
    no match for call to ‘(std::ofstream {aka std::basic_ofstream<char>}) (const char [9], const openmode&)’
    Savez-vous de quoi s'agit-il ?

  2. #2
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Bonjour, et comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    FichierProv::FichierProv() : fichier("test.txt", std::ios::trunc)
    {
    	if (!fichier)
    	{
    		std::cerr << "Erreur de creation du fichier" << std::endl;
    		exit 1;
    	}
    }
    De plus pense à rajouter "std::" devant "string" car apparemment il n'y a pas de "unsing namespace std;"

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 19
    Par défaut
    super, ça marche !
    Merci !

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Par ailleurs, je te recommande de te baser sur un principe simple nommé RAII (Ressource Acquisition Is Initialisation)

    Il s'agit de structurer les classes de ressource pour avoir la correspondance valeur=ressource
    L'idée, c'est de prendre/ouvrir la ressource dans le constructeur, et de la rendre dans le destructeur
    c'est le cas de string, par exemple, ou de (i/o)fstream

    L'effet immédiat, c'est l'absence de méthode close() / release() etc.
    En effet, le code qui y serait se trouve dans le destructeur.

    L'avantage, c'est que tu sais qu'un destructeur est appelé une et une seule fois: lorsque le scope de la variable se termine.

    Pour plus d'information, il y a plusieurs entrées dans la faq, et quelques tutos

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    De telles classes exposent généralement quand même une méthode close(), au cas où l'utilisateur aurait besoin de libérer la ressource avant la fin du bloc.
    Mais à part ça, le principe reste le même: Le destructeur libère automatiquement la ressource.

    C'est pour ça que je préfère l'autre nom de ce principe, "RRIF": Resource Release Is Finalization. Ce trouve que ça parle plus.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Manipulation de fichier (copier, supprimer, déplacer)
    Par Guigui_ dans le forum Général Python
    Réponses: 1
    Dernier message: 21/10/2004, 10h26
  2. Manipulation des fichiers
    Par monsau dans le forum Langage
    Réponses: 7
    Dernier message: 21/09/2004, 17h45
  3. [LG]Manipulation de fichiers
    Par yffick dans le forum Langage
    Réponses: 29
    Dernier message: 10/01/2004, 15h04
  4. Manipulation de fichiers - gestion d'extensions
    Par ulukai dans le forum Linux
    Réponses: 13
    Dernier message: 02/07/2003, 15h28
  5. Réponses: 2
    Dernier message: 18/01/2003, 17h06

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