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 ????????!!!!!!!!![]()
![]()
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 ????????!!!!!!!!![]()
![]()
Oui c'est normal, il s'agit de fonctions posix pour les unixoïdes.
Tu peux utiliser boost.filesystem.
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![]()
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 ????!!!!!!!!!![]()
![]()
![]()
![]()
![]()
![]()
![]()
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
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 !!!)
Fais des recherches avant de dire n'importe quoi.Envoyé par red210
File Management Reference.
MSDN est une documentation.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 ...
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 . . .![]()
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.
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![]()
Il faut inclure windows.h (qui inclura winbase.h).Envoyé par red210
Pas inclu avec la version Express.
Comment : utiliser l'édition Visual C++ Express avec le kit de développement Microsoft Platform SDK
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![]()
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...
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...
Installation de Visual Studio 2005 Express :
http://arb.developpez.com/vc++/express
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>)
À 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 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);
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.
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...
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.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
Mauvaise solution. La bonne étant de virer la macro UNICODE, ou l'option correspondante dans ton projet si tu utilises Visual C++.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
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
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.
Partager