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 :

Parcourir un dossier et lire les fichier 1 par 1.


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Points : 43
    Points
    43
    Par défaut Parcourir un dossier et lire les fichier 1 par 1.
    Bonjour,

    J'ai un dossier à parcourir et lire les fichiers qu'il contient un par un.
    Je sais qu'il faut faire une boucle for mais comment s'y prendre?
    Les fichiers que je veux lire sont du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nom.prenom1_1.extention // ce qui change ce sont les 1.
    Merci d'avance.

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 265
    Points : 6 686
    Points
    6 686
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    as-tu regardé dans la FAQ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    non pas encore mais j'y vais!

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par r0d Voir le message
    Bonjour,

    as-tu regardé dans la FAQ?
    Je trouve pas dans le FAQ la partie dans lequel tout ça est expliqué.

  5. #5
    Membre habitué

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 80
    Points : 127
    Points
    127
    Par défaut
    j'ai jamais fait un truc comme ça, mais pour ce qui est de générer les noms de fichiers tu peux faire avec des stringsstream

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (int i = 0 ; i< 10 ; ++i)
    {
                 stringstream file ;
    	file << "nom.prenom" ;
    	file << i << "_" << i << ".extention " ;
                 // récupération du nom de fichier sous format string
                 string filename = file.str () ;
    }

  6. #6
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 265
    Points : 6 686
    Points
    6 686
    Billets dans le blog
    2
    Par défaut
    En fait, ça dépend de ce que tu veux faire. Le problème c'est que la notion de fichier n'existe pas en C++ standard, et donc, selon ce qu'on veut faire, il existe plusieurs solutions différentes.
    Par exemple, si tu connais à l'avance les noms des fichiers, tu t'en sortira simplement avec les flux standar (fstream).
    Si une solution spécifique à windows te suffit, l'API win32 offre tout un tas de fonctions pour manipuler les fichiers.
    Sinon il y a des bibliothèques qui existent, et en particulier boost::filesystem.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par regis.portalez Voir le message
    j'ai jamais fait un truc comme ça, mais pour ce qui est de générer les noms de fichiers tu peux faire avec des stringsstream

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (int i = 0 ; i< 10 ; ++i)
    {
                 stringstream file ;
    	file << "nom.prenom" ;
    	file << i << "_" << i << ".extention " ;
                 // récupération du nom de fichier sous format string
                 string filename = file.str () ;
    }
    ok merci mais ce que je veux faire moi c'est de parcourir le dossier contenant ces fichier et de les lire 1 par 1.

    Du coup j'ai installé la bibliothèque boost et puis j'ai fait une boucle qui me lit les fichiers un par un.
    J'ai pas eu de message d'erreur dans le .cpp mais j'ai eu beaucoup de message d'erreur dans le .hpp que j'ai lâché l'affaire. Car j'ai essayé toutes les solutions qui existaient sur le net mais ça ne marche pas alors que j'ai installer tous les packages de boost et tout quoi!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <boost/filesystem.hpp>
     
    fs::directory_iterator end;
    for (fs::directory_iterator it(/mon/repertoire/contenant/les/fichiers); it != end; ++it)
    {
    ifstream curFamFile(it->path().string().c_str(),ifstream::in);
    …
    }

  8. #8
    Membre habitué

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 80
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par jamsgoodon Voir le message
    Bonjour,

    J'ai un dossier à parcourir et lire les fichiers qu'il contient un par un.
    Je sais qu'il faut faire une boucle for mais comment s'y prendre?
    Les fichiers que je veux lire sont du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nom.prenom1_1.extention // ce qui change ce sont les 1.
    Merci d'avance.
    S'ils sont tous dans le même dossier, et que la seule chose qui change c'est les 1, ma solution fonctionne...

    En fait j'ai pas bien compris le pb, les 1 change pour devenir quoi?

    Tu peux poster un listing du contenu de ton dossier?

  9. #9
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 265
    Points : 6 686
    Points
    6 686
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par jamsgoodon Voir le message
    J'ai pas eu de message d'erreur dans le .cpp mais j'ai eu beaucoup de message d'erreur dans le .hpp que j'ai lâché l'affaire. Car j'ai essayé toutes les solutions qui existaient sur le net mais ça ne marche pas alors que j'ai installer tous les packages de boost et tout quoi!
    Normalement l'installation de boost est très simple. Si cependant tu as des problèmes, je te conseille d'utiliser l'installeur fourni par boostpro computing.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par r0d Voir le message
    Normalement l'installation de boost est très simple. Si cependant tu as des problèmes, je te conseille d'utiliser l'installeur fourni par boostpro computing.
    En fait je travail pas sous windows, je suis sous la version 10.4 d'ubuntu.
    Sinon pour les fichiers 1 change pour devenir 2,3,4 ect c'est des noms de chromosome.
    Et pour le chromosome un par exemple y a plusieurs fichiers notés ...1_1, ...1_2 ect...

    Et pour l'ouverture du fichier c'est dans quelle partie que je dois indiquer le chemin du dossier? dans le ifstream ?

    Meri d'avance.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Avec ubunru tu as un package "libboost1.42-all-dev", ou "libboost1.42-dbg", ou "libboost1.42-dev", en fonction de la version que tu veux . Je ne suis pas sure que ce soit la dernière version, mais c'est plus facile à installer.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    je les tous installé les libboost, mais ça ne marche pas.
    Il veux pas marcher je pense.

    Voici le type de message d'eereur que ça me renvoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    /usr/include/boost/system/error_code.hpp|215|undefined reference to `boost::system::get_generic_category()'|
     
    /usr/include/boost/filesystem/operations.hpp|944|undefined reference to `boost::filesystem::detail::not_found_error()'|
     
    /usr/include/boost/filesystem/operations.hpp|1009|undefined reference to `boost::filesystem::detail::dir_itr_increment(void*&, void*&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, boost::filesystem::file_status&, boost::filesystem::file_status&)'|
     
    /usr/include/boost/filesystem/operations.hpp|877|undefined reference to `boost::filesystem::detail::dir_itr_close(void*&, void*&)'|
     
    /usr/include/boost/asio/detail/posix_tss_ptr.hpp|61|undefined reference to `pthread_key_delete'|
     
    /usr/include/boost/asio/detail/posix_tss_ptr.hpp|47|undefined reference to `pthread_key_create'|
    Merci de me débloquer s'il y a moyen.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Il faut lier les bibliothèques que tu utilise. D'après tes message d'erreur il faut que tu lies (lib)boost_system(.so), (lib)boost_filesystem(.so), et (lib)pthread(.so).

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par Joe Dralliam Voir le message
    Il faut lier les bibliothèques que tu utilise. D'après tes message d'erreur il faut que tu lies (lib)boost_system(.so), (lib)boost_filesystem(.so), et (lib)pthread(.so).
    Euh, comment lier des bibliothèques sous ubuntu???
    Je savais même pas que ça existait de lier des bibliothèques!
    Si quelqu'un peu me renseigner sur ça je suis preneur!

    Merci d'avance.

  15. #15
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Lorsque tu compiles avec gcc (ou g++ dans ton cas) tu peux lui passer plein d'arguments. Parmi ceux-ci, les deux suivants :

    * -L répertoire : ajoute répertoire à la liste des chemins dans lesquels les librairies sont cherchées. Par défaut, /usr/lib est déjà présent, et selon le système, d'autres peuvent être aussi présents.

    * -lnomlibrairie : lie la librairie libnomlibrairie.a (ou libnomlibrairie.so) avec le programme. En C++, si tu compiles avec g++, -lstdc++ est systématiquement lié avec ton programme.

    Pour simplifier : l'étape de lien est une étape fondamentale du modèle de compilation c et C++ : lorsque ton code est séparé dans plusieurs objets, la dernière étape prends tous ces objets pour créer un éxécutable. Une librairie n'est qu'une collection de fichiers pré-compilés. Si tu utilises des symboles qui ne sont pas définis dans ton programme (par exemple les symboles exportés par une librairie) alors il faut prévenir gcc qu'il faut lier ton programme avec cette librairie, sans quoi il n'est pas possible de générer le code exxécutable final.

    Pour plus d'information sur les utilitaires mis en oeuvre, man gcc (très très long), man ld, man ld.so

  16. #16
    Invité
    Invité(e)
    Par défaut
    Si tu n'utilise pas gcc directement(ni un fichier de configuration du genre qmake, cmake, etc...), c'est à dire si tu passe par un EDI, tu as sans doute une option pour indiquer les bibliothèques que tu veux lier. Voici la marche à suivre dans Codeblocks* par exemple :
    • Va dans Project/Build options
    • A droite clique sur la configuration qui nécessite ces bibliothèques
    • Va dans l'onglet Linker Settings
    • En dessous de link libraries, clique sur Add
    • Ecrit le nom de la bibliothèque que tu veux ajouter
    • A noter que tu peux aussi lier une bibliothèqe en utilisant l'autre cadre : il permet de passer à gcc les options de linkage que tu veux. Tu peux donc(voir post précédent) lier une bibliothèque avec -lnom_de_la_bibliothèque et ajouter un chemin avec -L


    *Je prend Codeblocks comme exemple, parce que : premièrement il est assez répandu et deuxiement c'est le seul que je connaissent sous ubuntu qui ne laisse pas l'utilisateur éditer les fichier de configuration de la ligne de commande du compilateur directement.

Discussions similaires

  1. Parcourir des dossiers et lire dans des fichiers
    Par Mut dans le forum Windows
    Réponses: 2
    Dernier message: 13/09/2013, 11h33
  2. [MySQL] Lire les fichiers d'un dossier
    Par Kitetkat dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/03/2012, 04h27
  3. parcourir un dossier et trouver les noms de fichier
    Par julie_lab dans le forum Entrée/Sortie
    Réponses: 17
    Dernier message: 24/10/2010, 02h27
  4. ouvrir un dossier et lire les fichiers .txt
    Par Agnès22 dans le forum VB.NET
    Réponses: 3
    Dernier message: 25/11/2009, 16h56
  5. Réponses: 3
    Dernier message: 07/02/2008, 13h34

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