1

Ok, ma question est p-ê neu², mais je sais pas comment lire le contenu d'un répertoire en C (pour obtenir une liste de fichiers et les manipuler après...)

Quel serait l'équivalent d'un fopen() pour un répertoire?


Prise de tête: PhD dans la mire.

------------------------------------------------------------------------------------
Mon site TI 83+ et 83+SE (mort)
Le forum TI 83+ de yAronet !!! (rattaché au site..)

2

msdn est ton ami: #include <windows.h> #include <stdio.h> void ScanDir(char *dirname, int indent) {     BOOL            fFinished;     HANDLE          hList;     TCHAR           szDir[MAX_PATH+1];     TCHAR           szSubDir[MAX_PATH+1];     WIN32_FIND_DATA FileData;     // Get the proper directory path     sprintf(szDir, "%s\*", dirname);     // Get the first file     hList = FindFirstFile(szDir, &FileData);     if (hList == INVALID_HANDLE_VALUE)     {          printf("No files found\n\n");     }     else     {         // Traverse through the directory structure         fFinished = FALSE;         while (!fFinished)         {             // Check the object is a directory or not             if (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)             {                 if ((strcmp(FileData.cFileName, ".") != 0) && (strcmp(FileData.cFileName, "..") != 0))                 {                     printf("%*s%s\\n", indent, "",                       FileData.cFileName);                     // Get the full path for sub directory                     sprintf(szSubDir, "%s\%s", dirname,                       FileData.cFileName);                     ScanDir(szSubDir, indent + 4);                 }             }             else                 printf("%*s%s\n", indent, "", FileData.cFileName);             if (!FindNextFile(hList, &FileData))             {                 if (GetLastError() == ERROR_NO_MORE_FILES)                 {                     fFinished = TRUE;                 }             }         }     }     FindClose(hList); } void main(int argc, char *argv[]) {     char *pszInputPath;     char pwd[2] = ".";     if (argc < 2)     {         printf("Argument not supplied - using current directory.\n");         pszInputPath = pwd;     }     else     {         pszInputPath = argv[1];         printf("Input Path: %s\n\n", pszInputPath);     }     ScanDir(pszInputPath, 0);     printf("\ndone.\n"); }

3

Et les fonctions standard, c'est pour les chiens? MinGW contient un dirent.h POSIX.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

Oui, je suis d'accord avec Kevin : les fonctiosn standard : opendir/readdir/closedir...
En plus, ce sera meme portable sous linux smile
Inutile d'utiliser les trucs immondes de MS quand on peut s'en passer... roll
Mon site perso : http://www.xwing.info

5

Et bonjour la lourdeur !
Les fonction opendir/readdir et closedir (si elle sont implémenté dans la couche posix de la série des NT) n'est qu'un front end au fonction fournies par l'API WIN32, autent utiliser DIRECTEMENT l'API fournie par l'OS
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

6

Et alors ? C'est le standard POSIX! Et tu n'as vraiment pas besoin de vitesse je pense smile
D'ailleurs faut que je les porte pour PedroM, moi.

7

godzil :
Et bonjour la lourdeur ! Les fonction opendir/readdir et closedir (si elle sont implémenté dans la couche posix de la série des NT)

Rien à voir avec la "couche POSIX" (Interix, qui n'est même pas livré avec Windows). C'est dans le runtime de MinGW. (Et aussi dans Cygwin et Interix, c'est vrai.)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

8

Microbug :
msdn est ton ami: #include <windows.h> #include <stdio.h> void ScanDir(char *dirname, int indent) {     BOOL            fFinished;     HANDLE          hList;     TCHAR           szDir[MAX_PATH+1];     TCHAR           szSubDir[MAX_PATH+1];     WIN32_FIND_DATA FileData;     // Get the proper directory path     sprintf(szDir, "%s\*", dirname);     // Get the first file     hList = FindFirstFile(szDir, &FileData);     if (hList == INVALID_HANDLE_VALUE)     {          printf("No files found\n\n");     }     else     {         // Traverse through the directory structure         fFinished = FALSE;         while (!fFinished)         {             // Check the object is a directory or not             if (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)             {                 if ((strcmp(FileData.cFileName, ".") != 0) && (strcmp(FileData.cFileName, "..") != 0))                 {                     printf("%*s%s\\n", indent, "",                       FileData.cFileName);                     // Get the full path for sub directory                     sprintf(szSubDir, "%s\%s", dirname,                       FileData.cFileName);                     ScanDir(szSubDir, indent + 4);                 }             }             else                 printf("%*s%s\n", indent, "", FileData.cFileName);             if (!FindNextFile(hList, &FileData))             {                 if (GetLastError() == ERROR_NO_MORE_FILES)                 {                     fFinished = TRUE;                 }             }         }     }     FindClose(hList); } void main(int argc, char *argv[]) {     char *pszInputPath;     char pwd[2] = ".";     if (argc < 2)     {         printf("Argument not supplied - using current directory.\n");         pszInputPath = pwd;     }     else     {         pszInputPath = argv[1];         printf("Input Path: %s\n\n", pszInputPath);     }     ScanDir(pszInputPath, 0);     printf("\ndone.\n"); }

Arg. Et dire qu'avec un langage interprété, non typé, et de haut niveau comme PHP, ça prend 5 lignes à tout casser tongue
avatar
I'm on a boat motherfucker, don't you ever forget

9

Kevin Kofler
:
godzil :
Et bonjour la lourdeur ! Les fonction opendir/readdir et closedir (si elle sont implémenté dans la couche posix de la série des NT)

Rien à voir avec la "couche POSIX" (Interix, qui n'est même pas livré avec Windows). C'est dans le runtime de MinGW. (Et aussi dans Cygwin et Interix, c'est vrai.)

Il y a une couche POSIX native avec l'implementation WIN32 des NTs !

Elle n'est pas complete et totale, mais elle y est

Et de tte maniere le "posix" de Cygwin/MinGW et autre n'est qu'une "emulation" en utilisant les api natives de Windows, cad les WIN32
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

10

Mais le dirent.c du runtime MinGW n'est pas lourd. (Regarde les sources, et tu verras que ce sont des fonctions très petites.) Celui de Cygwin, oui, il est carrément lourd, parce qu'il gère mountpoints, symlinks etc. Mais pas celui de MinGW.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

11

oui mais quel interet (a par celui du "portage" d'utiliser un front end qui ne fait que allourdir l'executable final ?
Enfin bon chacun fait comme qu'il veut, mais si on utilise un "vrai" compilo (ne pas entendre la que GCC n'en est pas un, de vrai) dans un environnement de devellopement "professionel" (sous windows) genre MSVC ou BorlandC, tu n'as accée la plus pars du temps qu'au API "native" de l'OS, a moins de s'amuser a porter la "libc" de MinGW ou autre....
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

12

Nan, dirent.h est accessible sous Borland tongue