LISTEUR DE FICHIERS/DOSSIERS

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 14 nov. 2007 à 15:32
cs_saylar Messages postés 102 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 10 février 2008 - 20 nov. 2007 à 17:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/44713-listeur-de-fichiers-dossiers

cs_saylar Messages postés 102 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 10 février 2008
20 nov. 2007 à 17:03
Ah ok mais je pense que cette macro ne concerne que les dll et comme sous linux c'est so c'est sûrement autre chose :)
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
19 nov. 2007 à 18:11
D'après ce qu'ils disent, gcc sous Windows le supporte mais pas un non-Windows.
cs_saylar Messages postés 102 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 10 février 2008
19 nov. 2007 à 08:44
Je commence à comprendre :) Uni... suivra les "recommandations" de gcc et l'équivalent sous VC++ fera de même pour son compilateur :)

Ca se tient mais on peut toujours essayer si ca marche avant de dire qu'il y aura des incompatiblités :)
__declspec (existe sous gcc) !

Bonne journée :)
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
18 nov. 2007 à 19:51
Le compilo respecte (plus ou moins) les standards mais, une fois les standards respecté, il peut très bien faire ce qui lui chante (comme ajouter des mots clés).
Les headers peuvent différer d'un compilo à l'autre car, ils suivront les spécifications du compilo pour lequel il a été créé.
cs_saylar Messages postés 102 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 10 février 2008
18 nov. 2007 à 19:29
Je me suis peut être emporté (trop de devoirs :( ) mais ce que je veux dire c'est que ca devrait fonctionner partout, c'est du C standard (du moins les headers de gcc, mingw, cygwin et d'autres) sont standards. VC++ c'est gcc à la sauce microsoft alors c'est sûr on ne sait jamais :)
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
18 nov. 2007 à 19:20
Je ne sais pas d'où vient ce discours. Ce que je dis, c'est qu'il vaut mieux éviter de mélanger les headers d'un compilo à l'autre. Rien à voir avec "l'esprit communautaire".
Rien ne te dis que unistd de mingw ne causera pas de conflits avec VC++.
Rien ne te dis que les headers sont structuré semblablement pour tout les compilo.
Il y a un mot clé sous les compilo gcc nommé __attribute__. Ce mot clé n'existe pas sous VC++.
À l'inverse, sous VC++, il existe __declspec, inexistant sous gcc.
Qu'arrivera t-il si tu ajoute un header contenant un de ces mots clés sur un compilo ne le supportant pas ?
Ben voilà, c'est ce que je veux dire par: Il y aura des conflits. Et encore, pas seulement des conflits mais des incompatibilités.
cs_saylar Messages postés 102 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 10 février 2008
18 nov. 2007 à 18:58
Dans ce cas si on veut utiliser le header fait par un ami on va se dire non il n'est pas dans mon compilateur, j'y touche pas ! C'est pas de l'esprit communautaire. Pour faire un programme multiplateforme, je doute qu'avec VC++ se soit correct moi j'utilise un compilateur qui conserve les standards et qui n'extrapole pas ! Si vous voulez rester avec vos headers, soit ! Mais ne dites pas qu'il y aura des conflits en utilisant des headers. Si vous avez la dernière version d'un header, vous le gardez sinon mettez le à jour et si vous ne l'avez pas gardez le ca peut toujours servir. Bien entendu que je peux prendre windows.h à la place des autres mais est-ce que ca fonctionnera sur mac et linux ? Est-ce que le petit jack qui vient d'apprendre le C, qui est sous linux et qui veut tester mon programme avec gcc pourra ? Avec VC++ on lui rira au nez ! Il faut être lucide, soit vous programmez pour vous et dans ce cas on peut se permettre d'utiliser n'importe quoi (tant que ca fonctionne sur sa becanne) soit vous vous mettez au service de la communauté et vous vous en tenez aux standards !

Voilà ce que j'en dis (lol)

PS: Bon ben va bien falloir que je me replonge sur mon dm de maths (quel vie : lycée -> prog -> dodo) !

Bonne soirée :)
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
18 nov. 2007 à 18:35
À éviter si possible. Il risque d'y avoir des conflits entre les différentes versions et headers. Si seul mingw est capable de le compiler directement alors ne le compile qu'avec mingw.
cs_saylar Messages postés 102 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 10 février 2008
18 nov. 2007 à 18:11
Ca compilera avec n'importe quel compilateur C encore faut il ajouter les headers (lol)
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
18 nov. 2007 à 16:21
Bon ben dans ce cas, va falloir préciser que ça ne compilera qu'avec ce compilateur.
cs_saylar Messages postés 102 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 10 février 2008
18 nov. 2007 à 16:12
Je veux pas lancer de débat mais pour faire du C (normalisé :) ) pour windows et linux moi je prend MinGW.
Si je veux faire du C++, je prend MinGW + Qt4 (pas de VC++ :D ) c'est mon choix et il ne changera pas. J'ai que 15 ans et je veux faire des trucs utilisables partout :)
Vous pouvez trouver ces headers partout sur le net (la flemme de mettre sur mon serveur les deux fichiers (lol ))
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
18 nov. 2007 à 16:02
N'existe pas ni sous VC++, ni avec la PSDK.
cs_saylar Messages postés 102 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 10 février 2008
18 nov. 2007 à 15:58
Ouai pour le fgets je corrige :) mais les deux headers existent bien sous windows :) je viens de voir : c:\MinGW\include ils y sont !

Voilà :)
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
18 nov. 2007 à 15:53
Attention, ton code ne compile plus sous windows.
unistd.h et dirent.h n'existent pas.
Sous windows, c'est windows.h qu'il faut inclure (pour unistd.h en tout cas, dirent.h, j'ignore ce que c'est).

Ensuite:
scanf(...) bof bof.
Je te suggère vivement de réutiliser fgets à la place. On aura pas ces stupides regex à formater ce qui prend un temps fou.
cs_saylar Messages postés 102 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 10 février 2008
18 nov. 2007 à 15:20
Je viens de lire mes emails et surprise :) Un monsieur du nom de Nicolas Stibon m'a modifié mon code pour qu'il fonctionne sous linux :) Je ne sais pas s'il a modifié autre chose mais j'ai aussi tôt (on écrit comme cela :) ) testé sous Linux et Windows et cela fonctionne :) Je met à jour cela (ca ne tient plus que sur un main).

Sinon il reste un petit truc : c'est surement correct (il a plus d'experiences que moi):

scanf ("%255[^\n]", directory);
scanf ("%*[^\n]"), getchar ();

Moi j'utilise fgets (scanf étant une grosse rose remplie de ronces pour les débutants :) )
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
17 nov. 2007 à 22:06
Oui, je sais que if(strcmp(...)) équivaut à if(strcmp(...) != 0)
Ce que je voulais dire, c'est que tu peux te passer de cette fonction, surtout pour tester 1 ou 2 caractères.
Ensuite, sizeDir, dans la fonction list, est un de ses paramètres. Si il n'est pas utiliser (car, je ne vois nul part, dans ta fonction list, l'utilisation de sizeDir), pourquoi ne pas le supprimer ?

Finalement, tu n'as toujours pas corrigé le problème de ta fonction qui, en cas d'erreurs, retourne sans fermer le répertoire.
cs_saylar Messages postés 102 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 10 février 2008
15 nov. 2007 à 18:49
(void) sizeDir; C'est pour contourner le unused variable sizeDir alors qu'elle est utilisée mais bon, enlevez ce morceau de code si vous le voulez.

Pour le premier truc c'est en fait :

if (strcmp(file->d_name, ".") != 0 && strcmp(file->d_name, "..") != 0)

Je viens de corriger, je vais updater sinon il est stable comparé à d'autres sources. Je n'ai absolument pas dit stable comparé à toutes les sources du même genre !

Merci pour le commentaire :)
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 nov. 2007 à 15:32
Je ne vois pas ce qu'il y a de vraiment différent avec les autres sources du même genre.

De plus, tu invoques la stabilité mais, à plusieurs endroits, dans ton code, tu quitte direct la fonction lors d'erreur sans même fermer le répertoire qui lui est parfaitement ouvert.
Ensuite:
if (strcmp(file->d_name, ".") && strcmp(file->d_name, ".."))

strcmp pour si peux...

Finalement
(void) sizeDir;

Hein ??? C'est quoi ça ?
Rejoignez-nous