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

SL & STL C++ Discussion :

r�cuperer une variable Vector remplie de noms de fichiers...


Sujet :

SL & STL C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    D�cembre 2005
    Messages
    225
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 225
    Par d�faut r�cuperer une variable Vector remplie de noms de fichiers...
    Salut tous , je voudrais bien savoir comment remplir un tableau Vector avec des noms de fichiers dans le r�pertoire courant et dans les sous dossiers , et sous-sous dosssiers etc...

    J'utilise Dev-C++ avec le compilateur MingW ( portage de GNU C sous Windows ) .

    Merci pour toute r�ponse .

    PS : le truc doit aussi fonctionner sous d'autres syst�mes ayant le compilateur GNU .

    @+ Bouazza

  2. #2
    Membre �prouv�
    Profil pro
    Inscrit en
    F�vrier 2004
    Messages
    1 825
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 1 825
    Par d�faut
    Cherche du c�t� de boost (http://www.boost.org/), ils ont une librarie sur les syst�mes de fichier tr�s pratique (http://www.boost.org/libs/filesystem/doc/index.htm)

    A bient�t

    Aur�lien

  3. #3
    Membre confirm�
    Inscrit en
    D�cembre 2005
    Messages
    225
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 225
    Par d�faut
    Merci mais n'y a-t-il pas une autre solution sans utiliser des librairies externes ?

    Merci pour toute r�ponse .

  4. #4
    Membre �prouv�
    Profil pro
    Inscrit en
    F�vrier 2004
    Messages
    1 825
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 1 825
    Par d�faut
    Ben pourquoi tu ne veux pas utiliser de librairie externe?

    Enfin bref, si, c'est possible, mais je pense que �a doit �tre fastidieux sans librairie.
    Toujours utile que boost sait le faire, et c'est opensource... T�l�charge le et regarde comment ils font, et fait pareil.

    A bient�t

    Aur�lien

  5. #5
    Membre confirm�
    Inscrit en
    D�cembre 2005
    Messages
    225
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 225
    Par d�faut
    Peux quelqu'un me donner un bout de code qui extrait les fichiers du dossier courant et des sous-dossiers , et des sous-sous dossiers etc... , tout en utilisant la librairie standard de C++ et sans librairie externe ( je pr�voie un programme qui doit etre portable et compatible avec toutes les plate-formes ayant un compilateur C++ ) .

    Merci pour toute r�ponse .

  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 : 51
    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
    Il n'y a rien de standard en C++ pour faire ce genre de choses.

    boost::filesystem, bien que non standard, a l'avantage d'�tre portable sur plein de plate-formes.

    De plus, une proposition a �t� faite de l'introduire dans la prochaine version de la norme C++.
    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
    Membre �prouv�
    Profil pro
    Inscrit en
    F�vrier 2004
    Messages
    1 825
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 1 825
    Par d�faut
    Oui voil�, je suis pas s�r mais je pense que ce genre de traitement fait appel au syst�me d'exploitation... donc si c'est bien �a, faut tous les conna�tre pour avoir quelque chose de portable.

  8. #8
    Membre confirm�
    Inscrit en
    D�cembre 2005
    Messages
    225
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 225
    Par d�faut
    Merci , mais comme j'ai dit , je ne veux pas une librairie externe .

    je vais essayer de faire des boucles pour explorer les r�pertoires pour les fichiers et de finir lorsque le dernier fichier a �t� trouv� .

  9. #9
    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 : 51
    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
    Encore une fois, ce n'est pas possible.

    Tu peux faire toutes les boucles que tu veux, tu ne peux pas explorer les r�pertoires en C++ standard. Il n'y au aucune fonction qui permette de faire �a.

    La seule chose existant en C++ standard, c'est un moyen � partir d'un nom de fichier (au format non standardis�), d'ouvrir un flux dessus, ou bien de supprimer ce fichier. Rien d'autre n'existe, et tu conviendras que ces deux fonctions sont insuffisantes pour explorer quoi que ce soit.

    Maintenant, pourquoi ce refus de biblioth�que externe ? Tu a indiqu� la portabilit�, mais ce n'est pas un probl�me avec boost::filesystem. Alors, quoi ?
    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.

  10. #10
    Membre �prouv�
    Profil pro
    Inscrit en
    F�vrier 2004
    Messages
    1 825
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 1 825
    Par d�faut
    Ben je pense qu'il ne veut pas � avoir � recompiler la moindre librarie pour l'exporter sous un autre OS (surement pour ne pas compliquer cette tache en devant aller chercher � droite � gauche les librarie et s'emb�ter � les recompiler)

    Mais bon sans librarie, soit tu passe des ann�es � refaire ce qui existe, soit tu fais pas grand chose...

  11. #11
    Membre confirm�
    Inscrit en
    D�cembre 2005
    Messages
    225
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 225
    Par d�faut
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    void listfiles(const char *WhereBegin)
     {
      struct _finddata_t D;
      int done=0;
      int hd;
      _chdir(WhereBegin);
      hd = _findfirst("*.*",&D);
      while (!done) 
      {
    	if (D.name[0]!='.')
    	{
    		if (D.attrib&0x10)
    		{
    			_chdir(D.name);
    			listfiles();
    			_chdir("..");
    		}
    		else	{
                 std::cout << D.name << std::endl;
           }
    	}
        done = _findnext(hd,&D);
    }
    }
    En fait ce code fait ce que je veux , mais comment faire pour qu'il retourne un vecteur contenant les noms de fichiers ( D.name ) ?

    Merci pour toute r�ponse.[/code]

  12. #12
    Membre �prouv�
    Profil pro
    Inscrit en
    F�vrier 2004
    Messages
    1 825
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 1 825
    Par d�faut
    ben tu d�clare un vector de const char*

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    std::vector<const char*> fileVector;
    et ensuite lorsque tu veux l'ajouter tu fais

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    fileVector.push_back(D.name);
    A bient�t

    Aur�lien

  13. #13
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Citation Envoy� par bouazza92
    Merci , mais comme j'ai dit , je ne veux pas une librairie externe
    Sauf que tu n'as pas le choix. Il n'y a rien dans le standard. Tu es oblig� d'utiliser une bilbioth�que extene au langage. M�me si elle est propre � ton SE.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  14. #14
    Membre confirm�
    Inscrit en
    D�cembre 2005
    Messages
    225
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 225
    Par d�faut
    Voici ce que j'ai fait mais �a ne marche pas :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    std::vector<const char*> listfiles(const char *WhereBegin)
     {
      std::vector<const char*> fileVector;
      struct _finddata_t D;
      int done=0;
      int hd;
      _chdir(WhereBegin);
      hd = _findfirst("*.*",&D);
      while (!done)
      {
       if (D.name[0]!='.')
       {
          if (D.attrib&0x10)
          {
             _chdir(D.name);
             listfiles(D.name);
             _chdir("..");
          }
          else   {
                 fileVector.push_back(D.name);
           }
       }
        done = _findnext(hd,&D);
    }
    return(fileVector);
    }
    Merci d'avance

  15. #15
    Membre confirm�
    Inscrit en
    D�cembre 2005
    Messages
    225
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 225
    Par d�faut
    �a se compile mais �a me donne des signes bizarres !

  16. #16
    Membre �prouv�
    Profil pro
    Inscrit en
    F�vrier 2004
    Messages
    1 825
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 1 825
    Par d�faut
    c'est quoi les erreurs?

  17. #17
    Membre confirm�
    Inscrit en
    D�cembre 2005
    Messages
    225
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 225
    Par d�faut
    Il n'y a pas d'erreur , le programme se compile , mais quand on l'execute , il �crit des caract�res bizarres au lieu d'�crire les noms des fichiers !

  18. #18
    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 : 51
    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
    Amusant, tu dis ne pas vouloir utiliser de biblioth�ques externes, � des fins entre autre de portabilit�, mais en fait, tu utilises une biblioth�que externe, non portable en plus.

    Les _chdir, _findfirst... n'ont rien de standard, et sont sp�cifiques � un windows. Tu peux donc oublier tous r�ves de compatibilit� tant que tu te bases sur �a pour parcourir tes r�pertoires...

    A part �a, les probl�mes que tu as viennent probablement de la gestion de cha�nes de caract�re en char* au lieu de std::string... Quand tu fais un push_back de D.name, tu copie un pointeur dans ton vecteur, or ce pointeur va pointer sur autre chose � l'it�ration suivante de ta boucle, et ne plus pointer sur rien quand tu sortira de cette boucle. La plus simple pour corriger ce code est probablement d'utiliser un vector<std::string> qui se chargera de g�rer corectement la copie de cha�nes de caract�res.

    Mais je te rapelles que tu n'as pas le choix, que tu es oblig� de passer par une biblioth�que externe, et que tant qu'� faire, autant passer par une biblioth�que portable, comme boost::filesystem, si tu recherches la portabilit�.

    PS : Boost::filesystem ne g�re pas encore les noms de fichier internationalis�s, (elle doit le faire dans sa prochaine version), ce qui peut �tre un inconv�nient par rapport � la biblioth�que windows que tu utilises, mais bon, de toute fa�on, tu n'utilises pas non plus cette biblioth�que de fa�on � obtenir des noms internationnalis�s.
    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.

  19. #19
    Membre confirm�
    Inscrit en
    D�cembre 2005
    Messages
    225
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 225
    Par d�faut
    Les biblioth�ques que j'utilise sont io.h et stdio.h et elles sont disponible sous linux et windows ( avec tous les compilateurs C++ ).
    et merci pour ta r�ponse , je vais essayer std::vector<std::string> .

  20. #20
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    J'en doute fort. http://dinkumware.com/manuals/reader.aspx?lib=cpp.
    Autre preuve le tiret bas qui pr�fixe les noms de fonctions. Le pr�fixage par tiret bas est r�sev� aux extensions propri�taires, et autres d�tails d'impl�mentation propres � tel ou tel autre compilateur.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. R�ponses: 0
    Dernier message: 15/11/2009, 17h00
  2. R�cuperer la valeur d'une variable � partir de son nom
    Par Etanne dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 20/10/2007, 18h04
  3. [Tableaux] r�cuperer une variable tableau pass� par URL
    Par molesqualeux dans le forum Langage
    R�ponses: 2
    Dernier message: 23/12/2005, 01h12
  4. [PHP-JS] R�cuperer une variable javascript..
    Par gwendy dans le forum Langage
    R�ponses: 3
    Dernier message: 17/10/2005, 21h24
  5. R�cup�rer une variable � partir de son nom ...
    Par CynO dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 13/10/2005, 16h59

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