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 :

Passer une variable en paramètre d'ouverture de fichier


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 41
    Points : 26
    Points
    26
    Par défaut Passer une variable en paramètre d'ouverture de fichier
    Bonjour à tous,

    J'aurais souhaité savoir s'il était possible lors de l'ouverture d'un fichier, de passer en paramètre une variable dans laquelle est stockée le chemin d'accès au fichier?

    Comme ca en fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ifstream fichier( name_folder );
    	if( fichier.is_open( ) == false )
    	{
    		cout << "ERREUR LORS DE L'OUVERTURE DU FICHIER" << name_folder << endl;
    		assert( false );
    		return -1;
    	}
    Merci d'avance

    Kira

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Mais name_folder doit contenir le chemin d'accès complet du fichier et non le chemin vers son répertoire uniquement. Par exemple c:\dir1\file1.ext1 sous Windows et /home/dir2/file2.ext2 sous linux ...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Oui c'est le cas.
    Cela est donc possible apparement.

    Merci pour cette confirmation .

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    En complément, sache que lorsqu'aucun répertoire n'est spécifié (par exemple quand tu as juste "file.ext"), la plupart des OS considèrent que le le fichier se trouve dans le répertoire courant de ton programme. Le répertoire courant c'est par défaut le répertoire qui contient ton programme. Sous Windows tu peux récupérer/changer le chemin vers ce répertoire courant avec GetCurrentDirectory/SetCurrentDirectory et sous nux avec getcwd/chdir. Un programme A peut également lancer un programme B en spécifiant le répertoire courant initial de B, mais là ça commence déjà à être un p'ti peu compliqué ^^.

    Il n'y a pas de fonctions standard permettant de gérer les répertoires parce que le C++ standard ne sait même pas ce que c'est qu'un répertoire ...

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    C'est tout à fait faisable, mais:
    • On conseille très fortement de travailler avec la classe string, disponible dans l'espace de noms std par inclusion du fichier d'en-tête standard <string> pour gérer les... chaines de caractères (plutôt que les chaines de caractères "C style")
    • Le premier paramètre à fournir aux classes *fstream est... un char* const contenant le nom du fichier

    Dés lors, il faut utiliser la fonction membre c_str() de la classe string lorsque l'on ouvre le fichier.

    Cela nous donne donc un code 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
    16
    int foo()
    {
        std::string str ;
        /* construction de la chaine de caractère représentant le nom
         * du fichier
         */
        std::ifstream ifs(str.c_str());
        if(ifs)
        {
            /* lecture */
        }
        else
        { 
            std::cerr<<"Error : unable to open file "<<str;
        }
    }
    On peut, également, envisager de faire en sorte à utiliser un argument passé à la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /* la chaine de caractères arg est construite par ailleurs, sans doute
     * dans la fonction appelante
     */
    Type readFile(std::string const & arg)
    {
        std::ifstream(arg.c_str());
        /* la suite */
    }
    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

  6. #6
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par koala01
    Le premier paramètre à fournir aux classes *fstream est... un char* const contenant le nom du fichier
    const char * .
    Dés lors, il faut utiliser la fonction membre c_str() de la classe string lorsque l'on ouvre le fichier.
    J'ai toujours trouvé dommage que la classe std::string ne dispose pas d'opérateur surchargé du cast vers const char * comme avec les CString de MFC. Mais bof, cest pas auss important que ça .

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

Discussions similaires

  1. [system] Passer une variable en paramètre
    Par kamelcompte dans le forum MATLAB
    Réponses: 4
    Dernier message: 22/10/2011, 14h13
  2. [XSL] Passer une variable en paramètre d'une balise
    Par verbose dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 28/04/2010, 18h30
  3. Réponses: 0
    Dernier message: 23/04/2009, 16h13
  4. Passer une variable anonyme en paramètre
    Par Barsy dans le forum Linq
    Réponses: 5
    Dernier message: 30/01/2009, 10h50
  5. Réponses: 1
    Dernier message: 17/07/2008, 16h41

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