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 :

création de fichier log avec ofstream


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut création de fichier log avec ofstream
    Bonjour

    voici mon problème

    j'ai une classe A (classe ou je fais mon traitement de simulation ) et une classe B qui des fonctions statiques qui sert d afficher les résultats de simulation de la classe A (A et b sint des amis)
    exemple d'utilisation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //classeA
     
    if(event)
    B::print(result)
    alors dans le print result réside mon problème car si j'ouvre et je ferme mon fichier de log je n'aurai que la dernière variable passée
    je voudrai savoir comment je pourrais utiliser de facon global.

    la fonction print
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    B()::print(result)
    ofstream myfile ("example.txt");
      if (myfile.is_open())
     
     {   
     myfile << i <<'\t'<<result<<endl;
     
       myfile.close();
      }  else cout << "Unable to open file";
    en d'autre terme je voudrais ouvrir le fichier au debut et le fermer à la fin de l'execution j'ai pensé au constructeur/destructeur mais mes fonctions sont statiques

    merci d'avance

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

    Informations professionnelles :
    Activité : aucun

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

    Si tes fonctions sont statiques, crées... un membre statique pour ton fichier

    N'oublie pas qu'il s'agira alors de veiller à ce qu'il soit correctement initialisé, par exemple, en vériviant qu'il est bien ouvert.

    Un code "vite fait", à tester serait proche de
    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
    #include <fstream>
    class B
    {
        public:
            static void log(Event * e)
            {
                if(!file)
                    file.open("fichier.log",std::app); // app permet de réouvrir un
                                                       // fichier existant et d'écrire à la fin
                                                       // de celui-ci
               /* log de l'événement */
            }
        private:
            static std::ofstream file;
    };
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut
    Bonjour

    merci pour votre réponse sauf que j'ai l'impression qu'en déclarant mon fichier ainsi il ne sera jamais initialisé car j'ai une erreur de référence indéfinie en procédant ainsi.

    c'est en fait ios::app pas std:app mais je l'ai connu grâce à vous

  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 : 50
    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
    Par défaut
    Je ne vois pas l'intérêt d'en faire un membre statique. Ça va maintenir le fichier ouvert en écriture pendant toute la durée du programme, ce qui n'est pas forcément ce qu'on veut d'un log.

    Par contre, l'ouvrir à chaque fois avec en mode app, oui.
    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 confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut
    oui tu as raison sauf que en mode app les données de l'actuel execution sont concaténées avec l'ancienne chose que je veux pas
    en d'autre terme je veux un log pour chaque execution

  6. #6
    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 : 50
    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
    Par défaut
    Donc tu ouvres le fichier en mode normal une première fois au début de ton application (par exemple dans le main), puis ensuite tu l'ouvres en mode app.
    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.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Pour ce qui était du problème du membre statique, il faut le définir dans un fichier source (a priori B.cpp) comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::ofstream B::file(/* les paramètre ici */);

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut
    @JolyLoic mon problème c est que je n'ai pas accès à la fonction main car je modifie juste une sorte de bibliothèque de simulation de protocole ad hoc avec le fameux simulateur NS2 mais j'ai toujours besoin d'ouvrir le fichier durant toute la durée de l'exécution

  9. #9
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut
    si tu ne veux pas que le pointeur sur ton fichier soit en statique met au moins une variable booléenne en statique, initialisé par défaut à false. Cette variable qui informe si c'est la première fois ou non que l'on ouvre le log l'hors de l'exécution du programme devra être initialisé à true dès la première écriture dans le log. Et a chaque fois que tu ouvre ton fichier tu testes cette variable pour savoir si tu dois ouvrir ton fichier en écrasant l'existant ou en mode append.

Discussions similaires

  1. 2 applis pour 1 seul fichier log avec log4j
    Par doudou13 dans le forum Logging
    Réponses: 5
    Dernier message: 12/12/2010, 16h44
  2. [DOM] création de fichier XML avec PHP
    Par cortex007 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 09/12/2007, 11h31
  3. [FPDF] Création de fichier pdf avec fdf
    Par tyler22 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 20/02/2007, 13h50
  4. Création de fichiers indésirés avec mail SMTP
    Par taly dans le forum Modules
    Réponses: 5
    Dernier message: 28/09/2006, 16h14
  5. [XSL] Création de fichiers SVG avec PHP
    Par trotters213 dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 17/03/2006, 16h51

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