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

Dev-C++ Discussion :

Chemin et nom de fichier sous Dev C++


Sujet :

Dev-C++

  1. #1
    Membre éclairé Avatar de Yazoo70
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 133
    Par défaut Chemin et nom de fichier sous Dev C++
    Salutations,

    Je suis en train de faire mon stage de fin de première année de BTS IG.
    Je fais un petit programme qui permet de générer des fichiers .bat pour modifier la configuration de la connection réseau en fonction du lieu ou se trouve le PC.
    J'utilise Dev C++.

    Au moment de la création du fichier bat, j'aimerais que l'utilisateur puisse choisir le nom qu'il veut lui donner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    cout<<"Nom du fichier voulu:";
    cin>>nomfichier;
     
    ofstream fc("C:/DocsStan/Programme/dossierbats/testbat.bat");
    ...
    mais je n'arrive pas à remplacer le nom du fichier (ici testbat.bat) par le nom que l'utilisateur rentre.
    Si je ferme les guillemets pour placer ma variable, dev cpp me dit qu'il expect une parenthèse apres la fermeture du guillement.
    et si je met "nomfichier" à la place de "testbat.bat', ben il appellera le fichier "nomfichier" :p
    Donc la, je coince

    Autre question, comment prendre en compte les espaces dans le chemin d'acces au fichier ?
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ofstream fc("C:/DocsStan/Programme/dossierbats/testbat.bat")
    Ici, si je renomme mon répertoire "DocsStan" en "Docs Stan", ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ofstream fc("C:/Docs Stan/Programme/dossierbats/testbat.bat")
    Dev cpp arrete la lecture du chemin au premier espace qu'il rencontre donc C:/Docs, qui n'existe pas donc erreur .

    Merci d'avance à tous ceux qui prendront le temps de lire mon message et encore mieux, d'y répondre

    +

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    1/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::string path = "C:/DocsStan/Programme/dossierbats/" + nomfichier;
    ofstream fc(path.c_str());
    2/ Es-tu sûr que c'est à ce moment-là que l'espace pose problème ? Ce n'est pas plutôt lors d'une éventuelle saisie, ou un appel à une autre fonction ?

  3. #3
    Membre éclairé Avatar de Yazoo70
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 133
    Par défaut
    Citation Envoyé par Laurent Gomila
    1/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::string path = "C:/DocsStan/Programme/dossierbats/" + nomfichier;
    ofstream fc(path.c_str());
    2/ Es-tu sûr que c'est à ce moment-là que l'espace pose problème ? Ce n'est pas plutôt lors d'une éventuelle saisie, ou un appel à une autre fonction ?
    1/ Tu peux m'expliquer un peu ta réponse stp??
    en dehors de mes bases je suis un peu perdu, par exemple pourquoi utiliser std::string pour déclarer la variable et pas tout simplement string ??
    ensuite pourquoi le c_str() apres le nom de la variable??

    Edit:Merci, ça marche! mais std:: et c_str() m'intriguent.

    2/Non, je suis sur que c'est dans le chemin vers le fichier :'(
    D'autre part, quand je rentre un espace dans les string, genre le nom du fichier, le nom de la connection reseau à laquelle les modifications doivent s'appliquer,etc... à chaque fois le programme plante... Je pense que Dev C++ à un problème avec les espaces, ou alors c'est moi

    Edit: Je peux fournir le code complet, mais à mon avis il sera plutôt indigeste du fait de mon inexpérience :'(

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651

  5. #5
    Membre éclairé Avatar de Yazoo70
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 133
    Par défaut
    Ok merci,
    j'ai compris pour le std, par contre le c_str() ca reste flou :p
    Sinon pour l'espace qui genait, c'est celui dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    if(choix==1){system("c:/Docs Stan/Programme/dossierbats/testbat.bat");}
    ...
    quand je propose de lancer le .bat directement dans la meme fenêtre, il dit:
    'c:/Docs' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commande
    sinon pour éviter les problèmes d'espaces dans les string, j'utilise getline(cin,chaine) comme c'est écrit dans la FAQ
    Mais quand je l'utilise il faut que je créé un fake getline comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    getline(cin,rien);// Ce getline est créé pour palier le problème
    getline(cin,nomco);
    ...
    parceque le premier getline écrit plante à chaque fois,
    c'est à dire qu'il fait comme si il n'existait pas et écrit la ligne suivante juste apres, ce qui donne un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    cout<<"Quel est votre nom:"<<endl;
    getline(cin,nom);
    cout<<"Quel est votre prenom:"<<endl;
    getline(cin,prenom);
    ...
    ce qui donne à l'écran de la console( _ representant le curseur, je peux répondre à la deuxième question)
    :
    Quel est votre nom:Quel est votre prenom:_
    bref c'est sportif, mais c'est comme ca qu'on apprends (du moins j'espère :p )

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    salut,
    rajoute un guillemet suplémentaire en début et fin de ton appel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system("\"c:/Docs Stan/Programme/dossierbats/testbat.bat\"");

  7. #7
    Membre éclairé Avatar de Yazoo70
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 133
    Par défaut
    Citation Envoyé par olive_le_malin
    salut,
    rajoute un guillemet suplémentaire en début et fin de ton appel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system("\"c:/Docs Stan/Programme/dossierbats/testbat.bat\"");
    Ca ne marche pas :'(

    mais j'ai plutot un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(choix==1){system(path.c_str());
    maintenant, avec la remarque de Laurent Gomila au dessus,
    j'avais juste oublié de mettre à jour la proposition d'execution de fichier :'(
    mais ca me met la même erreur!

    Edit: enfin avec les guillemets en plus ca marche, il faut juste que je trouve un moyen de les rajouter à path.c_str()

    Edit 2:
    si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string path2 = "\"C:/Docs Stan/Programme/dossierbats/\"" + nomfichier;
    if(choix==1){system(path2.c_str());}
    ca ne fonctionne pas :'(

    bon en meme temps je suis débile, avec le guillemet avant le nom du fichier ca va pas marcher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string path2 = "\"C:/Docs Stan/Programme/dossierbats/" + nomfichier + "\"";
    if(choix==1){system(path2.c_str());}
    avec ça, ça fonctionne, merci bcp !

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    j'ai compris pour le std, par contre le c_str() ca reste flou :p
    std::string encapsule un tableau de caractères. Lorsque tu veux un accès direct à ce tableau, sous forme de const char* donc, il faut appeler c_str().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("c:/Docs Stan/Programme/dossierbats/testbat.bat");
    Bon ben ça n'était donc pas sur le constructeur de ofstream...
    Il faut bien ajouter les guillements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::string GoodPath = "\"" + path + "\"";
    system(GoodPath.c_str());

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    ben alors, c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    std::string path = "\"C:/Docs Stan/Programme/dossierbats/" + nomfichier;
    path += "\"";
    ofstream fc(path.c_str());

  10. #10
    Membre éclairé Avatar de Yazoo70
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 133
    Par défaut
    Ok merci à vous deux, j'ai compris pour le chemin

    Sinon vous auriez une idée pour le getline?

    merci!

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Parfois il reste des choses dans le buffer d'entrée (genre un \n), ce qui explique que la saisie ne te demande pas ton avis. La FAQ donne un code pour purger le buffer d'entrée.

  12. #12
    Membre éclairé Avatar de Yazoo70
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 133
    Par défaut
    Citation Envoyé par Laurent Gomila
    Parfois il reste des choses dans le buffer d'entrée (genre un \n), ce qui explique que la saisie ne te demande pas ton avis. La FAQ donne un code pour purger le buffer d'entrée.
    J'ai utilisé la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::cin.ignore( std::numeric_limits<streamsize>::max(), '\n' );
    trouvée dans la FAQ, mais je ne comprends pas son utilisation.
    De plus, quel que soit le numéro que je rentre, le problème reste le même :'(

  13. #13
    Membre éclairé Avatar de Yazoo70
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 133
    Par défaut
    Je me permet un petit up au cas ou quelqu'un ait une idée pour palier le problème du getline, mais comme c'est secondaire et que le programme marche bien sans, je laisserai mourir le topic sans trop de regrets :p

Discussions similaires

  1. [AC-2007] chemin et nom de fichier dans un FileDialog
    Par Rémi GAUDINAT dans le forum Contribuez
    Réponses: 0
    Dernier message: 18/02/2012, 12h53
  2. [AC-2003] Séparer chemin et nom de fichier
    Par Flop1908 dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/07/2010, 14h33
  3. Mauvais nom de fichier sous internet explorer 6
    Par Jidefix dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 25/09/2009, 16h26
  4. [E-07] récuperer le chemin et nom du fichier xls
    Par law56100 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/03/2009, 17h40
  5. [Batch] chemin absolu / Nom de fichier
    Par andlio dans le forum Windows
    Réponses: 3
    Dernier message: 03/08/2006, 03h40

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