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

Langage C++ Discussion :

Compatibilité system() et flux (erreur symbol is not available)


Sujet :

Langage C++

  1. #1
    Membre du Club
    Homme Profil pro
    ingénieur
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Points : 46
    Points
    46
    Par défaut Compatibilité system() et flux (erreur symbol is not available)
    Bonjour a tous,
    je fais face a un "petit" problème :
    mon programme prend en paramètre le répertoire d'entrée et le répertoire de sortie.
    Je dois écrire le résultat dans des sous répertoires du répertoire de sortie.
    si mon répertoire de sortie est /home/Desktop/, je dois écrire dans /home/Desktop/ANNUAIRE/BRETAGNE/ le fichier Noms.txt
    Je fais donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ofstream fluxNom(m_tmpFileName);
    où m_tmpFileName = /home/Desktop/ANNUAIRE/BRETAGNE/Noms.txt
    Si les dossiers ANNUAIRE/BRETAGNE/ existent, ça marche.

    Or a la base mon répertoire n'existe pas, j'ai donc utilisé la commande system( ); pour créer des répertoires:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    system(cd /home/Desktop/; mkdir ANNUAIRE; cd ANNUAIRE/; mkdir BRETAGNE; cd BRETAGNE);
    ofstream fluxNom(m_tmpFileName);
    compilation : OK
    mais en debug, il bloque à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ofstream fluxNom(m_tmpFileName);
    le debugueur affiche :
    4 <symbol is not available> 0x61726574
    3 std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream() 0x00abaeaf
    si je mets en commentaire le code de creation de dossier, ça marche, j'ai essayé de me placer dans le dossier BRETAGNE grace à la balise system, et faire juste appelle à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ofstream fluxNom("Noms.txt");
    mais ça ne fonctionne pas non plus

  2. #2
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ofstream fluxNom(m_tmpFileName.c_str());
    Pour la manipulation de fichier, le parcours d'arborescence, la création de répertoire, etc. je te conseil de t'appuyer sur Boost.Filesystem.

  3. #3
    Membre du Club
    Homme Profil pro
    ingénieur
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Points : 46
    Points
    46
    Par défaut
    Ajouter la librairie boost au projet, juste pour manipuler 2 dossiers, c'est pas un peu "trop" ?

    Pas moyen d'utiliser une autre méthode ?

  4. #4
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Waldoo Voir le message
    Pas moyen d'utiliser une autre méthode ?
    Si, il y a moyen : faire tes propres fonctions et classes sans la maturité d'une bibliothèque éprouvée et donc avec bugs, rigidités, fragilité de design, problèmes de maintenance, d'évolution, etc...
    Et puis, une fois boost introduite, je suis sur que tu trouveras l'utilité d'autres de ses bibliothèques

  5. #5
    Membre du Club
    Homme Profil pro
    ingénieur
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Si, il y a moyen : faire tes propres fonctions et classes sans la maturité d'une bibliothèque éprouvée et donc avec bugs, rigidités, fragilité de design, problèmes de maintenance, d'évolution, etc...
    Et puis, une fois boost introduite, je suis sur que tu trouveras l'utilité d'autres de ses bibliothèques
    Ok je pensais juste que utiliser boost aurait été la méthode un peu "buldozer" et qu'il y aurait eu un autre moyen, merci je vais me pencher la dessus

  6. #6
    Membre du Club
    Homme Profil pro
    ingénieur
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Points : 46
    Points
    46
    Par défaut résolu
    J'ai finalement utilisé la commande mkdir, au lieu de system, et ça marche.

    A la différence que je crée les répertoires dans le dossier de l’exécutable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <sys/stat.h>		//creer repertoires sous-repertoires
    #include <sys/types.h>
    #include <errno.h>
    [...]
    cout << "Creation des repertoires de sortie" << endl;
    if (mkdir("ANNUAIRE",0777))
    	perror("creation ANNUAIRE");
    if (mkdir("ANNUAIRE/BRETAGNE/",0777))
    	perror("creation ANNUAIRE/BRETAGNE/");
    if (mkdir("ANNUAIRE/ALSACE/",0777))
    	perror("creation ANNUAIRE/ALSACE");
    cout << "Creation des fichiers :" << endl;
    [...]
    Et si les répertoires sont déja présents, je reçois un message de warning:
    creation ANNUAIRE/ALSACE: File exists
    PS: j'aurai aussi pu passer par boost, c'est intégré dans mon environement rehdat

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

Discussions similaires

  1. Erreur "Symbol could not be resolved"
    Par nassarane dans le forum Eclipse C & C++
    Réponses: 1
    Dernier message: 07/01/2013, 18h25
  2. Réponses: 10
    Dernier message: 20/05/2011, 09h25
  3. [AC-2000] Erreur! function is not available in espressions in query
    Par Spawny123 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/08/2009, 15h49
  4. Réponses: 2
    Dernier message: 25/12/2005, 20h03
  5. Erreur ORA-00979 : not a GROUP BY expression sur Oracle9i
    Par Dirty Henry dans le forum Oracle
    Réponses: 9
    Dernier message: 21/10/2005, 14h23

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