Liste des fichiers d'un repertoire

Liste des fichiers d'un repertoire - C - Programmation

Marsh Posté le 08-04-2004 à 22:53:20    

Bonjour, je voudrais pouvoir recuperer la liste des fichiers dans un repertoire. Le repertoire courant, ou un autre que je pourrais spécifier.
Je voudrais savoir si des commande du style find first, find next existe.
PAr ex, j'appelle find first, et çà me renvoie un pointeur vers le premier fichier du repertoire et find next autant de fois que je veux pour m'envoyer des pointeurs vers les autres.
Je voudrais aussi savoir s'il existe une commande me retournant le nombre de fichiers du repertoire.
 
Enfin, je précise que je prefererais ne PAS passer par les mfc, car c'ets encé etre un code portable sous linux, mais aussi sous window.
Merci et @+++

Reply

Marsh Posté le 08-04-2004 à 22:53:20   

Reply

Marsh Posté le 08-04-2004 à 23:30:23    

rien de standard.
 
peut être en utilisant la glib

Reply

Marsh Posté le 09-04-2004 à 00:28:00    

Glib  :??:  kesako ?
 
j'ai trouvé çà en fouillant sur le net avec mon ami google :love:  

Code :
  1. #include <stdio.h>
  2. #include <dir.h>
  3. #include <conio.h>
  4. #include <dos.h>
  5. #include <string.h>
  6. // recherche le repertoire courant
  7. char *current_directory (char *path)
  8. {
  9.     strcpy (path, "X:\\" );      // on place un X
  10.     path[0] = 'A' + getdisk();  // on remplace le X par le vrai disque
  11.     getcurdir (0, path+3);      // on recherche les sous-repertoires
  12.     return (path);
  13. }
  14. void main(void)
  15. {
  16.     /*
  17.     struct ffblk
  18.      {
  19.         char ff_reserved[21]; // reserve par DOS
  20.         char ff_attrib;      // attribut a trouver
  21.         int ff_ftime;       // temps fichier
  22.         int ff_fdate;       // heure fichier
  23.         long ff_fsize;      // taille fichier
  24.         char ff_name[13];    // nom fichier
  25.      };
  26.     */
  27.     struct ffblk ffblk;     // info fichiers
  28.     char curdir[MAXPATH];   // chemin
  29.     int done;               // compteur
  30.     clrscr();
  31.     current_directory(curdir);
  32.     printf("Repertoire : %s\n", curdir);
  33.     printf("Affichage des fichiers avec l'extension *.*\n" );
  34.     delay(1500);
  35.     done = findfirst("*.*",&ffblk,0);
  36.     while (!done)
  37.      {
  38.         printf(" %s\t", ffblk.ff_name);
  39.         done = findnext(&ffblk);
  40.      }
  41.     getch();
  42. }


 
et
 

Code :
  1. //La recherche peut porter sur un listage non exhaustif,
  2. //par exemple, listage des fichiers '*.txt'.
  3. //Pour un listage exhaustif, il faudra demander le listage des fichiers '*.*'
  4. #include <stdio.h>
  5. #include <windows.h>
  6. #include <dir.h>
  7. void ls(char *);
  8. void main()
  9. {
  10.    // ******* On determine le repertoire courant
  11.    char dir[MAXDIR];           // Tableau qui va contenir le path.
  12.    strcpy(dir, "X:\\" );        // Remarque: X est pris au hazard.
  13.    dir[0] = 'A' + getdisk();   // On remplace X par la lettre du lecteur.
  14.    getcurdir(0, dir+3);        // On rajoute le reste du path => getcurdir()
  15.    // **************************
  16.    printf("Le repertoire courant est : %s\n\n\n",dir);
  17.    strcat(dir,"\\*.*" );        // On va lister ts les fichiers du rep.
  18.    ls(dir);                    // Fonction qui va lister.
  19.    system("PAUSE" );            // Pause
  20. }
  21. void ls(char * path)
  22. {
  23.    int r=0, f=0;               // r -> nbre de repertoire, f -> nbre de fichier
  24.    WIN32_FIND_DATA File;       // Va contenir les informations de la recherche
  25.    HANDLE liste;         // Va contenir le handle de la recherche
  26. // FindFirstFile() initialise la recherche et retourne le premier fichier trouvé.
  27.    liste = FindFirstFile(path, &File);
  28. // FindNextFile() récupére l'ensemble des fichiers trouvés.
  29.    while((FindNextFile(liste, &File))){
  30. if(File.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){// ==> Repertoire
  31.     printf("<REP>\t%s\n",File.cFileName);
  32.     r++;
  33.      }
  34.      else{// ==> Fichier
  35.             printf("\t%s\t%d,%d Ko\n",
  36.             File.cFileName, // Nom
  37.             (File.nFileSizeHigh*MAXDWORD+File.nFileSizeLow)/1024, //taille
  38.                     (File.nFileSizeHigh*MAXDWORD+File.nFileSizeLow)%1024);
  39.     f++;
  40. }
  41.    }
  42.    printf("\n\t\t\t%d repertoire(s)\n",r);
  43.    printf("\t\t\t%d fichier(s)\n\n\n",f);
  44. // FindClose() ferme la recherche
  45.    FindClose(liste);
  46. }


 
Le pb, c'est que çà compile pas à cause des fonctions
getcurdir et gesdisk
Il manque un header non ?
@+++


Message édité par GOUGOU1 le 09-04-2004 à 10:29:12
Reply

Marsh Posté le 09-04-2004 à 00:28:59    

ça c'est du pur code windows

Reply

Marsh Posté le 09-04-2004 à 00:40:28    

en Glib2 qui existe à peu près partout
 
 

Code :
  1. #include <glib.h>
  2. #include <stdio.h>
  3. int main()
  4. {
  5.   GDir *root = g_dir_open("/", 0, NULL);
  6.   const gchar *entry = NULL;
  7.   while((entry = g_dir_read_name(root)) != NULL)
  8.     {
  9.       puts(entry);
  10.     }
  11.   g_dir_close(root);
  12. }


 
 
t'as pas idée à quel point le code que tu as donné est 100% windows, y a au moins une dizaine de fonction spécifique à windows : delay, getch, clrscr, getcurdir, getdisk, struct ffblk, findfirst ne serait-ce que pour le premier morceau de code

Reply

Marsh Posté le 09-04-2004 à 06:05:17    

opendir, c'est POSIX.

Reply

Marsh Posté le 09-04-2004 à 12:31:45    

matafan a écrit :

opendir, c'est POSIX.

c'est POSIX windows ?

Reply

Marsh Posté le 09-04-2004 à 12:50:43    

ok, donc, il faudrait que je trouve une description du contenu des fonction de glib, c'est çà ?

Reply

Marsh Posté le 09-04-2004 à 14:29:28    

GOUGOU1 a écrit :

ok, donc, il faudrait que je trouve une description du contenu des fonction de glib, c'est çà ?
 

ben la glib existe pour windows

Reply

Marsh Posté le 09-04-2004 à 23:20:22    

je vais peter un cable   :sleep:  
J'ai tapper glib dasn google, et bin j'ai trouvé de tout
Tu parle de quel glib ? Du glib pour gtk ou d'un autre truc, car j'ai trouvé une bibliothèque pour simulier un synthé qui s'appel glib  :pfff:  
Pourrais tu m'éclairer un peu plus ?
Sinon, j'ai essayé de compiler ces codes mais mon compilateur ne trouve pas dir.h, je peux le chopper où (j'ai déjà cherché, mais rien de sur, car là aussi, j'ai 50 versions différentes}
merci, et @+++

Reply

Marsh Posté le 09-04-2004 à 23:20:22   

Reply

Marsh Posté le 09-04-2004 à 23:46:54    

gtk.org :o
 
 
ton code à toi, en tout cas, il ne passera certainement pas sous Linux, et sous windows, faut que tu trouves le bon compilateur et tout le bordel : bref t'es coincé des deux côtés : alors que la glib, elle marche partout

Reply

Marsh Posté le 10-04-2004 à 12:50:40    

bon, je crois avoir trouvé mon bonheur (par hasard)
 
http://forum.hardware.fr/hardwaref [...] 7128-1.htm
 
par contre, c'est 100% window, mais au moins, çà marche, donc je reste sur çà.
A la rentré, j'irais voir mon prof de système pour qu'il m'explique comment faire sous linux, mais je pense que je pourrais faire un appel de ls en redirigeant la sortie dans un fichier, en ensuite m'occuper de ce fichier.
@+++

Reply

Marsh Posté le 10-04-2004 à 12:59:28    

attends, tu nous prends la tête que tu veux un truc qui marche partout ... moi je te sors la glib ... et la tu nous ponds une windowserie de MERDE et tu conclues que sous linux tu va utiliser ls (on ne parle même pas de pipe évidemment) . NON TU LE FAIS EXPRES OU QUOI ?
 
man opendir
man readdir
man closedir
man scanddir
man glob
 
la prochaine fois que tu poseras une question, je ferais bien attention de me souvenir que tu demandes ce dont tu ne veux pas, et qu'en fin de compte, t'en as pas grand chose à faire des réponses.


Message édité par Taz le 10-04-2004 à 13:12:12
Reply

Marsh Posté le 10-04-2004 à 13:00:19    

GOUGOU1 a écrit :


A la rentré, j'irais voir mon prof de système pour qu'il m'explique comment faire sous linux, mais je pense que je pourrais faire un appel de ls en redirigeant la sortie dans un fichier, en ensuite m'occuper de ce fichier.
@+++


[:lacuna coil]

Reply

Marsh Posté le 10-04-2004 à 13:48:49    

J'ai pas linusx chez moi, je l'ais qu'a l'IUT.
Et pour glib, je l'ais dl, mais j'arrive pas à linker correctement.
Et oui, mon but est de faire un truc portable, mais je vais déjà tenter de le faire uniquement sous windaub puis je ferais les changements adequa pour le rendre portable.
 

Citation :

man opendir  
man readdir  
man closedir  
man scanddir  
man glob


 
pk tu m'a pas donné ces fonctions dès le début ?
C'ets un truc tout nouveau pour moi çà, donc voilà, je sais pas où chercher, et quand je trouve un truc, c'est soit 100% windaub, soit çà compil pas.
 
Sinon, tu pourrais m'expliquer comment tu compile un truc tapper avec Gtk et Glib ?
Comme çà, j'aurais pas a attendre la rentrée.
J'ai déjà fait noirs de trucs avec Gtk, mais en ADA. Pour inclure les fichiers, on se fais pas chier, on rajoute juste -ipath$ et çà compile.
Avec devcpp, j'ai rajouter le chemin dans les options de compil, mais çà chi toujours, pareil pour VC6.
Comment faire ?
merci
@+++
 
PS : excuse moi, mais quand je souhaite faire un truc portable, et que j'arrive pas à le faire dasn un premier temps, bin je le fais pour une plateforme, puis je retranscrit petit à petit le code pour le rendre portable.

Reply

Marsh Posté le 10-04-2004 à 14:26:05    

pour skeye
faire l'équilavalent de çà.
 

Code :
  1. system("DIR > a.txt" );


 
mais bon, çà ne me va pas, car dans ce cas, le code sera pas portable du tout car l'instruction changera.
C'est pour çà que je voulais utiliser des trucs avec find first, find next .....
@++++


Message édité par GOUGOU1 le 10-04-2004 à 14:27:16
Reply

Marsh Posté le 10-04-2004 à 14:27:20    

GOUGOU1 a écrit :

pour skeye
 

Code :
  1. system("DIR > a.txt" );




...et?
Si tu appelles ça de la programmation, je prie pour ne jamais avoir à travailler avec toi.

Reply

Marsh Posté le 10-04-2004 à 14:29:21    

j'appele pas çà de la programmation, mais du bidouillage  :lol:  
oui, et je viens de dire que je ne voulais pas utiliser un truc de ce genre. Mais çà marcherais.
@++

Reply

Marsh Posté le 10-04-2004 à 17:24:43    

GOUGOU1 a écrit :

J'ai pas linusx chez moi, je l'ais qu'a l'IUT.
Et pour glib, je l'ais dl, mais j'arrive pas à linker correctement.
Et oui, mon but est de faire un truc portable, mais je vais déjà tenter de le faire uniquement sous windaub puis je ferais les changements adequa pour le rendre portable.
 
PS : excuse moi, mais quand je souhaite faire un truc portable, et que j'arrive pas à le faire dasn un premier temps, bin je le fais pour une plateforme, puis je retranscrit petit à petit le code pour le rendre portable.

et bien justement, il ne faut absolument pas faire comme ça : soit tu écris 2 versions du code pour une meme interface et tu gères ça la compilation, soit tu utilises une bibliothèque qui fait ça pour toi. mais là t'es déjà dans le mur

Reply

Marsh Posté le 10-04-2004 à 18:42:56    

ok
Bon, j'ai fini de faire mon programme sous windows.
JE vais me mettre sur glib ce soir je pense.
MAis j'arrive toujours pas à compiler  :fou:  
Comment je configure mon compilateur {VC6 ou DevCpp} ?
@+++

Reply

Marsh Posté le 11-04-2004 à 10:40:54    

je sais pas, ça doit être dans la documentation, sinon, fais un sujet pour demander de l'aide

Reply

Marsh Posté le 11-04-2004 à 13:54:29    

ok.
C'est bon, j'ai réussi à installer le tout, çà compile, mais dès que je lance le programme, çà me marque une erreur dans la fenetre dos.
 
@+++++

Reply

Marsh Posté le 11-04-2004 à 16:31:39    

GOUGOU1 a écrit :

mon but est de faire un truc portable, mais je vais déjà tenter de le faire uniquement sous windaub puis je ferais les changements adequa pour le rendre portable.


 
Bonne chance [:xp1700]
 
Non sérieux tu perds ton temps a faire ca. Tout sera a refaire quand tu voudras passer sur un autre OS

Reply

Marsh Posté le 11-04-2004 à 16:32:48    

GOUGOU1 a écrit :

çà me marque une erreur dans la fenetre dos.


 :lol:  :lol:  :lol:  Et ... on est censés t'implorer pour que tu nous la dises?

Reply

Marsh Posté le 11-04-2004 à 17:43:14    

Taz

Citation :

je sais pas, ça doit être dans la documentation, sinon, fais un sujet pour demander de l'aide


 
http://forum.hardware.fr/hardwaref [...] 9340-1.htm
 
Le sujet change legerment, donc j'ai crée u nouveau topic.
Mais vu que tu m'inplore ace, la voilà   :lol:  
 

Code :
  1. ** (Test Gtk.exe:1144): WARNING **: No builtin or dynamically loaded modules 
  2. were found. Pango will not work correctly. This probably means 
  3. there was an error in the creation of: 
  4. 'C:\Program Files\Microsoft Visual Studio\MyProjects\Test Gtk\Debug\etc\pango\ 
  5. pango.modules' 
  6. You may be able to recreate this file by running pango-querymodules


 
repond dans l'autre topic, ce sera plus logique.
@++

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed