Bonjour.

Je souhaite lister les fichiers d'un répertoire dans un tableau pour ensuite leur appliquer 1 à 1 un traitement particulier.

Mon idée d'organisation est la suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
// je liste les noms des fichiers à traiter dans un tableau 
char *tab_list_files[256];
 
//je fais une boucle qui va traiter tous les fichiers
While(tab_list_files[i]!=NULL)
{
    current_file = tab_list_files[i];
    traitement();
    i++
}
1 - Est ce que c'est une bonne organisation?


2 - J'ai un problème technique dans mon code à l'étape qui consiste à lister les fichiers à traiter et les stocker dans un tableau de char:

- je liste les fichiers d'un répertoire
- si le nom de fichier commence par "debut", je l'affiche et je le stock dans mon tableau
-> OK
- mais une fois le listing terminé, quand je veux réutiliser les noms de mes fichiers séléctionnés, ils ont tous pris le nom du dernier fichier lu dans le répertoire...

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
 
char *tab_list_files[256];
int i;
 
int main()
{
 
    struct dirent *lecture;
    DIR *rep;
    rep = opendir("." );
 
    i=0;
 
    while ((lecture = readdir(rep))) {                  // on lit tous les fichiers du répertoire local
 
        if(!strncmp(lecture->d_name,"debut",5))       // si les 5 premières lettres du nom de fichier = "début"
        {
            tab_list_files[i] = lecture->d_name;        // alors on enregistre ce nom de fichier dans le tableau tab_list_files
            printf("%s\n", tab_list_files[i]);          // T1 au passage on l'affiche
            i++;                                        
        }
 
    }
    closedir(rep);
 
    i=0;
    while(tab_list_files[i]!=NULL)                      // on va afficher toutes les noms de fichiers stoquées qui ne sont pas vides
    {
        printf("\n+1 %s\n",tab_list_files[i]);           // T2 on réaffiche les noms des fichiers commençant par "début" -> cela ne marche pas
        i++;
    }
 
 
    getch();
    return 1;
}
Ce code ne fonctionne pas car tab_list_files[i] = lecture->d_name; ne copie pas la valeur de lecture->d_name dans tab_list_files[i], il ne fait que pointer, du coup les tab_list_files[i] affichent tous la dernière valeur prise par lecture->d_name : le nom du dernier fichier du répertoire lu.

Donc j'ai pensé à utiliser strcpy(tab_list_files[i],lecture->d_name);

Compilation ok mais crash du programme à l’exécution.

Comment que je dois faire pour arranger ça?

Merci.


PS : pour la lecture des fichiers du répertoire j'ai utilisé un code que j'ai trouvé tout fait sur le net... si vous avez une toute autre prosposition, tant que c'est du C, je prends