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 :

Lister le contenu d'un repertoire


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Par défaut Lister le contenu d'un repertoire
    Bonjour a tous,

    Je dois lister le contenu d'un repertoire en C++ et a mon tres tres tres tres grand etonnement, les fonctions opendir et readdir ne semblent pas etre reconnue ...? sous windows biensure ...

    Est ce normal ????????!!!!!!!!

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Oui c'est normal, il s'agit de fonctions posix pour les unixoïdes.

    Tu peux utiliser boost.filesystem.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Par défaut
    Pas mal du tout ces fonctions, c'est quand meme dramatique qu'il n'y est dans aucune librairie de windows avec ces foutues fonctions opendir et readdir...

    Avec ca en tout ca, ca va roxavavourer !! thanks

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Par défaut
    J'arrive quand meme vraiment pas a comprendre que pour lister un repertoire sous windows de chiot#e, on soit obliger soit d'installer la librairie cite plus haut, soit installer la librairie msdn payante...

    C'est quand meme un comble, tout ca juste pour lister un foutu repertoire ???

    C'est une blague de microsoft ????!!!!!!!!!

  5. #5
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut
    Si tu n'as pas besoin de la portabilité tu peux utiliser les fonction de l'API Windows. Un exemple dans la FAQ : http://c.developpez.com/faq/c/?page=...HIERS_dir_list

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Par défaut
    Oui mais tu es sure qu'il n'y a pas besoin de msdn pour utiliser findFirstFile, car la description de la fonction renvoie sur le site msdn.microsoft.com ...

    (L'installation de boost est un peu complique pour rajouter une goute de plaisir a tout ca, je dirais meme que j'ai jamais vue l'installation d'une librairie aussi complique que ca !!!)

  7. #7
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Citation Envoyé par red210
    J'arrive quand meme vraiment pas a comprendre que pour lister un repertoire sous windows de chiot#e, on soit obliger soit d'installer la librairie cite plus haut, soit installer la librairie msdn payante...
    Fais des recherches avant de dire n'importe quoi.

    File Management Reference.

    Oui mais tu es sure qu'il n'y a pas besoin de msdn pour utiliser findFirstFile, car la description de la fonction renvoie sur le site msdn.microsoft.com ...
    MSDN est une documentation.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Par défaut
    Desole pour MSDN j'etais persuade qu'il s'agissait d'une librairie, ca change quand meme pas mon avis pour le fait qu'il n'y ait pas de fonction opendir et readdir...

    Desole de ne pas avoir l'habitude de developper sous windows mayti4 j'espere que tu me pardonneras ca . . .

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Il n'y a rien à installer de payant... La msdn n'est que l'aide de la bibliothèque de Microsoft.
    Quant à Boost.Filesystem, j'ai écrit un tuto à ce sujet.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Par défaut
    Vraiment desole de faire le boulet mais je lis que findFirstFile a besoin du header Winbase.h, mais celui ci n'est pas dans mon repertoire include de visual studio express...

    Merci

  11. #11
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Citation Envoyé par red210
    Vraiment desole de faire le boulet mais je lis que findFirstFile a besoin du header Winbase.h, mais celui ci n'est pas dans mon repertoire include de visual studio express...
    Il faut inclure windows.h (qui inclura winbase.h).

    Pas inclu avec la version Express.

    Comment : utiliser l'édition Visual C++ Express avec le kit de développement Microsoft Platform SDK

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Par défaut
    Je te remercie bien pour les conseils et le petit lien.

    Je ne savais pas qu'il n'y avait pas SDK d'installer dans la version express et encore moins qu'il fallait l'utiliser

  13. #13
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 308
    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 308
    Par défaut
    NB: les fonctions que tu cherches viennent de POSIX, IIRC. Et POSIX est une tierce norme qui n'est ni C99, ni C++98, ni C++09.

    Quant à boost, le plus gros est d'installer bjam. Après, cela va tout seul.
    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é
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Par défaut
    Merci l'hermitte pour ta reponse

    Franchement la programmation windows c'est definitivement le futur, il m'aura fallut plus d'une soiree et un debut de nuit pour faire un listage de repertoire qui ne marche pas...

    En effet la fonction findFirstFile prend en parametre un LPCWSTR qui n'est autre qu'un char sur 2 octets (What's the fuck ???), a ce que j'ai pu lire il ne faut donc pas passer comme simpler premier parametre une chaine de caractere car meme en la castant je me suis rendue compte que ca merdais.

    Du coup il faudrait utiliser un wchar_t sur 2 octets (What's the...), mais du coup j'essaye un simple : wchar_t *str = "Debug", ba le compilo n'apprecie guerre...

    Non simplement pour dire que les gars de microsoft aurait pu penser genericiter avant de pondre des types incomprehensible...

    J'ai egalement lu a droite a gauche que l'on pourrait utiliser des macros pour convertir le type en LPCWSTR ou LPCTSTR mais les includes preciser n'existe pas chez moi...

    Enfin, ce projet doit etre fait sous windows et je n'ai pas le choix c'est pourquoi j'aimerai savoir si quelequ'un, un vaillant chevalier qui aurait compris leur logique, pourrait me venir en aide pour simplement, le plus simplement du monde meme, pouvoir lister un repertoire sur l'OS site auparavant...

  15. #15
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Installation de Visual Studio 2005 Express :
    http://arb.developpez.com/vc++/express

  16. #16
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 400
    Par défaut
    FindFirstFile ne prend pas un LPCWSTR, mais un LPCTSTR.
    (en fait, c'est un typedef, selon le type de compilation:
    • Non-unicode : FindFirstFile=FindFirstFileA, LPCTSTR=LPCSTR=const char *
    • Unicode: FindFirstFile=FindFirstFileW, LPCTSTR=LPCWSTR=const wchar_t *

    Le mieux sous Windows, c'est d'utiliser toujours des LPCTSTR, LPTSTR, TCHAR *, tableaux de TCHAR, etc.
    Une constante chaîne en compatible avec LPCTSTR se déclare avec la macro TEXT() (définie en incluant <windows.h>) et/ou _T() (définie en incluant <tchar.h>)

    Code C/C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    LPCTSTR sczUneChaine = TEXT("Blablabla");
    LPCTSTR sczUneAutreChaine = _T("Blabla");
     
    size_t nLongueur = _tcslen(sczUneChaine);
    WIN32_FIND_DATA wfd;
    FindFirstFile(TEXT("C:\\*.*"), &wfd);
    À partir de ce code, il suffit de régler une option de compilation pour que le compilateur génère un code correspondant à l'un des deux codes suivants:
    Code équivalent non-unicode : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    LPCSTR sczUneChaine = "Blablabla";
    LPCSTR sczUneAutreChaine = "Blabla";
     
    size_t nLongueur = strlen(sczUneChaine);
    WIN32_FIND_DATAA wfd;
    FindFirstFileA("C:\\*.*", &wfd);
    Code équivalent Unicode : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    LPCWSTR sczUneChaine = L"Blablabla";
    LPCWSTR sczUneAutreChaine = L"Blabla";
     
    size_t nLongueur = wcslen(sczUneChaine);
    WIN32_FIND_DATAW wfd;
    FindFirstFileW(L"C:\\*.*", &wfd);

    Note: Comme tu peux le voir, une chaîne unicode est déclarée avec le préfixe 'L'
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Par défaut
    Ah oui vue sous cet angle, merci pour ta tres bonne reponse...

    En fait lorsque j'ecris la fonction findFirstFile, la completion me propose de continuer avec un LPCWSTR, j'en deduis donc que c'est la fonction unicode qui est adopte par defaut, j'ai prefere directement ajouter les A a la fin des fonctions pour preciser que j'utiliserai les fonctions ANSI et non UNICODE de ces fonctions.

    En revanche, que j'utilise la version unicode ou ANSI, dans aucun des 2 cas je n'ai les accents, je pensais qu'avec UNICODE je les aurais eu mais non...

  18. #18
    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
    En fait lorsque j'ecris la fonction findFirstFile, la completion me propose de continuer avec un LPCWSTR, j'en deduis donc que c'est la fonction unicode qui est adopte par defaut
    Ne fais pas confiance à la completion pour tout ce qui dépend d'options du projet ou de macros prédéfinies. Il se peut très bien qu'il prenne la première version qu'il trouve.

    j'ai prefere directement ajouter les A a la fin des fonctions pour preciser que j'utiliserai les fonctions ANSI et non UNICODE de ces fonctions
    Mauvaise solution. La bonne étant de virer la macro UNICODE, ou l'option correspondante dans ton projet si tu utilises Visual C++.

  19. #19
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 400
    Par défaut
    En effet, il faut autant que possible travailler en TCHAR.

    Quant à "avoir les accents", je suppose que tu veux dire par là "Avoir les accents qui s'affichent bien sur la console".

    Pour cela, tu peux utiliser les fonctions de conversion CharToOem() et CharToOemBuff().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. [libcurl] lister le contenu d'un repertoire web
    Par Jérémy Lefevre dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 16/03/2007, 15h26
  2. Lister le contenu d'un repertoire
    Par dert72 dans le forum Langage
    Réponses: 6
    Dernier message: 15/11/2006, 19h24
  3. Lister le contenu d'un repertoire dans un ListBox
    Par MonsieurK dans le forum Access
    Réponses: 5
    Dernier message: 13/07/2006, 12h18
  4. Comment lister le contenu d'un repertoire
    Par jeff&&php dans le forum Langage
    Réponses: 17
    Dernier message: 31/05/2006, 12h29
  5. [debutant] lister le contenu d'un repertoire
    Par azrael88370 dans le forum Débuter
    Réponses: 5
    Dernier message: 12/01/2006, 15h00

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