1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <sys/types.h>
static int cmp (void const *a, void const *b)
{
char const *const *pa = a;
char const *const *pb = b;
return strcmp (*pa, *pb);
}
void tri (char *rep)
{
DIR *monrep = opendir (rep);
if (monrep != NULL) /*le répertoire existe */
{
struct dirent *courant;
size_t nb = 0;
/*on lit le premier fichier du répertoire */
while ((courant = readdir (monrep)) != NULL)
{
nb++; /*On enregistre le nombre de noms */
}
printf ("%d entrees\n", nb);
rewinddir (monrep);
{
/* On alloue un tableau de nb lignes de taille "char *" */
char **tE = malloc (nb * sizeof *tE);
if (tE != NULL)
{
size_t i = 0;
while ((courant = readdir (monrep)) != NULL && i < nb)
{
tE[i] = strdup (courant->d_name); /*on remplit chaque ligne du table tE du nom du fichier trouvé */
i++;
}
/*Phase de tri de tE */
qsort (tE, nb, sizeof *tE, cmp);
/*Affichage de la table t */
{
size_t i;
for (i = 0; i < nb; i = i + 1)
{
printf ("Ligne%d : '%s'\n", i, tE[i]);
free (tE[i]), tE[i] = NULL;
}
free (tE), tE = NULL;
}
}
}
}
else
{
printf ("erreur d'ouverture du repertoire\n");
}
}
int main (int argc, char *args[])
{
if (argc > 1)
{
tri (args[1]);
}
return 0;
} |
Partager