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:
1 - Est ce que c'est une bonne organisation?
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++ }
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...
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.
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; }
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![]()
Partager