Bonjour a tous,
je suis en train de faire un petit programme pour supprimer les fichiers en double et je galere un peu
Je travaille sous l'OS linux et j'ai réussi via la commande ls -alR a recuperer les noms de fichiers, date de modif, arborescence et a tout mettre dans un tableau de 8 colonnes et du nombre de lignes qu'il faut de la maniere suivante
( sachant que j'ai mis chaque dossier pere qui est avant tous les fichiers contenus dans la colonne 1 de mon tableau en laissant les 7 autres colonnes vides)
/*
./.adobe/Acrobat/7.0/Preferences
drwxr-xr-x 3 tbouvet eleves 4096 2006-12-12 15:00 .
drwxr-xr-x 6 tbouvet eleves 4096 2006-12-12 15:00 ..
drwxr-xr-x 3 tbouvet eleves 4096 2006-12-12 15:00 Collab
-rw------- 1 tbouvet eleves 3051 2007-06-15 10:48 reader_prefs
./.adobe/Acrobat/7.0/Preferences/Collab
drwxr-xr-x 3 tbouvet eleves 4096 2006-12-12 15:00 .
drwxr-xr-x 3 tbouvet eleves 4096 2006-12-12 15:00 ..
-rw------- 1 tbouvet eleves 1367 2007-06-15 10:48 RSS
drwxr-xr-x 3 tbouvet eleves 4096 2006-12-12 15:00 Collab
*/
Dans le cas present, le fichier Collab est en double donc je souhaiterais recuperer les noms de dossier pere des deux fichiers en double afin de pouvoir faire une commandePour cela, j'ai mis une structure conditionnelle
Code : Sélectionner tout - Visualiser dans une fenêtre à part rm nom_dossier_pere/Collabqui devrait etre valide uniquement si la colonne 8 est nulle donc uniquement si il y a un nom de dossier dans la colonne 1, mais ca ne marche pas; le programme ne considere pas les cases comme etant nulles.
Code : Sélectionner tout - Visualiser dans une fenêtre à part if ptableau[i].colonne8 == NULL
Est ce que quelqu'un sait pourquoi ces colonnes ne sont pas considérés comme nulles ou comment je pourrais faire autrement pour recuperer le nom de dossier..?
ci joint la declaration de mon tableau, et la facon dont j'ai récupéré les chaines de caractere provenant d'un fichier texte
Par avance merci
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 typedef struct ligne { char colonne1[NB]; char colonne2[NB]; char colonne3[NB]; char colonne4[NB]; char colonne5[NB]; char colonne6[NB]; char colonne7[NB]; char colonne8[NB]; } ligne; char * avoile; avoile = (char*)malloc(NB*sizeof(char)); i=-1; while ( ! feof (moulinette) ) { fgets(chaine,NB,moulinette); // on met ligne par ligne le resultat de ls -alR dans "chaine" tab=strtok(chaine," \n"); //on recupere chaque chaine de charactere de "chaine" i++; j=0; while (tab != NULL) // tant que le tab n'est pas vide, on continue a prendre des valeurs { strcpy(tmp[j].t,tab); //on met chaque valeur de tab dans une variable tampon tmp[j] de 0 a 7 j++; tab = strtok (NULL," \n"); //on reinitialise tab } if (strlen(tmp[0].t)>strcspn(tmp[0].t,":")) //sctrcspn compte le nombre characteres moins le ":", strlen compte le nombre de characteres => si c un dossier, il se finit par ":", donc on rentre dans cette boucle { avoile = strtok(tmp[0].t,":"); //on met le nom de dossier sans ":" dans une variable tampon strcpy(ptableau[i].colonne1,avoile); //on met cette variable tampon dans la ligne concernée colonne 1 } else { strcpy(ptableau[i].colonne1,tmp[0].t); //droits d'execution, lecture strcpy(ptableau[i].colonne2,tmp[1].t); strcpy(ptableau[i].colonne3,tmp[2].t); //dossier utilisateur strcpy(ptableau[i].colonne4,tmp[3].t); //dossier parent strcpy(ptableau[i].colonne5,tmp[4].t); //poids strcpy(ptableau[i].colonne6,tmp[5].t); //date de derniere modif strcpy(ptableau[i].colonne7,tmp[6].t); //heure de derniere modif strcpy(ptableau[i].colonne8,tmp[7].t); //nom du fichier, dossier } }
Partager