Bonjour à tous !
voilà je suis actuellement en train de réaliser un projet en langage C et avec la bibliothèque gtk+.

ce programme devra traiter des fichier .txt qui contiennent des informations (codes erreur , date , lieu ......) et afficher le dernier état du véhicule.
De plus , on devra avoir accès à une historique des états antérieurs.



Je rencontre deux problemes actuellement :

1- J'ai crée une fonction "listerFichier (char const *directory)" qui permet de lister tout les fichiers d'un repertoire (ex. : directory = "C:\\Projet"), de trier les fichiers par ordre croissant, de les stocker dans un tableau de char "chaine[i]" et de les affichers.

Mon probleme : je doit trier ces fichiers en fonction de la référence Z26XXX et dans l'ordre chronologique( la date figure dans le titre)

Reférence Date format(.txt)

Z26571_TING_180112_0956.txt
Z26567_TING_130112_1017.txt
Z26566_TING_210212_1024.txt
Z26565_TING_230212_0958.txt
Z26565_TING_060212_0954.txt
Z26565_TING_060112_0958.txt
Z26564_TING_030212_0941.txt
Z26529_TING_200212_1001.txt
.... il y a des centaines de fichiers de ce genre.

après avoir trié , je copier tout les fichier avec la meme référence
dans un meme fichier dans l'ordre chronologique.

Ma fonction ne trie uniquement par ordre décroissant en lisant chaque caractere un a un.

Je ne voi pas comment je pourrais procéder.

Mon idée : récupérer le tableau "chaine[]" dans le main , lire le nom de chaque fichier caractere par caractere pour pouvoir ensuite trier.

Mais je n'arrive pas à récupérer ce tableau.

voici ma fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
void listerFichier (char const *directory)
{
   DIR *dir = opendir (directory);
   if (dir != NULL)
   {
      char *chaine[512];
      int i = 0;
 
      printf ("Dossier : '%s'\n", directory);
      {
         struct dirent *file;
         while ((file = readdir (dir)) != NULL)
         {
            if (strcmp (file->d_name, ".") != 0
                && strcmp (file->d_name, "..") != 0)
            {
               chaine[i] = strdup (file->d_name);
               if (i < sizeof chaine / sizeof *chaine)
                  i++;
               else
                  break;
            }
 
         }
         closedir (dir);
      }
 
      {
         int n = i;
 
         for (i = 0; i < n; i++)
         {
            printf ("%s\n", chaine[i]);
         }
         printf ("Fin repertoire %s\n", directory);
 
         for (i = 0; i < n; i++)
         {
            free (chaine[i]), chaine[i]=NULL;
         }
      }
 
   }
}
Merci.