Bonjour , j'ai réalisé un ptt programme pour copier les dossiers(fichiers, répertoires)
d'un répertoire source dans un répertoire cible.
j'éspere trouver un ptt aide pour l'améliorer car, je réussi à avoir les fichiers dans le répertoire cible mais avec une nomination bisard.
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
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105 #include <stdio.h> #include <fcntl.h> #include <errno.h> #include <dirent.h> #include <sys/stat.h> #include <sys/types.h> int copier_fichier (char *f_source, char *f_cible) { char buffer[512]; int fd1, fd2, n; strcat(f_cible,f_source); //Ouvrir le fichier à copier en lecture fd1=open (f_source , O_RDONLY); // Creer et ouvrir le fichier "titi.txt" en ecriture fd2=open (f_cible , O_CREAT|O_WRONLY|O_TRUNC,0666); while((n=read(fd1,buffer,512))>0) { write(fd2,buffer,n); } close(fd1); close(fd2); return 0; } int copier_dir (char *r_source, char *r_cible) { struct dirent *lecture; DIR *rep1,*rep2; strcat( r_cible,"/"); // Ouvrir le réperoire source rep1 = opendir(r_source); // Ouvrir le répertoire source rep2 = opendir(r_cible); while ((lecture = readdir(rep1))) { struct stat st; stat (lecture->d_name, &st); if (!strcmp (lecture->d_name, "." )) continue; if (!strcmp (lecture->d_name, ".." )) continue; //if (S_ISDIR(st.st_mode)) // répertoire //copier_dir(lecture->d_name,lecture->d_name); if (S_ISREG(st.st_mode))// fichier régulier { printf("%s\n",r_cible); copier_fichier(lecture->d_name,r_cible); } } return 0; } void main (int argc, char * argv[]) { copier_dir(argv[1],argv[2]); }
pour printf("%s",r_cible);
j'ai le résultat suivant:
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 ./tmp1/ ./tmp1/copier-rep.c~ ./tmp1/copier-rep.c~copier ./tmp1/copier-rep.c~copiercopier_rep.c~ ./tmp1/copier-rep.c~copiercopier_rep.c~newrep ./tmp1/copier-rep.c~copiercopier_rep.c~newreprep ./tmp1/copier-rep.c~copiercopier_rep.c~newreprepcopier_fichier.c~ ./tmp1/copier-rep.c~copiercopier_rep.c~newreprepcopier_fichier.c~copier_fichier.c ./tmp1/copier-rep.c~copiercopier_rep.c~newreprepcopier_fichier.c~copier_fichier.cmourad.txt ./tmp1/copier-rep.c~copiercopier_rep.c~newreprepcopier_fichier.c~copier_fichier.cmourad.txttype_file.c~ ./tmp1/copier-rep.c~copiercopier_rep.c~newreprepcopier_fichier.c~copier_fichier.cmourad.txttype_file.c~mourad~ ./tmp1/copier-rep.c~copiercopier_rep.c~newreprepcopier_fichier.c~copier_fichier.cmourad.txttype_file.c~mourad~type_file ./tmp1/copier-rep.c~copiercopier_rep.c~newreprepcopier_fichier.c~copier_fichier.cmourad.txttype_file.c~mourad~type_filecopier.c ./tmp1/copier-rep.c~copiercopier_rep.c~newreprepcopier_fichier.c~copier_fichier.cmourad.txttype_file.c~mourad~type_filecopier.ctatos.tx ./tmp1/copier-rep.c~copiercopier_rep.c~newreprepcopier_fichier.c~copier_fichier.cmourad.txttype_file.c~mourad~type_filecopier.ctatos.txlister ./tmp1/copier-rep.c~copiercopier_rep.c~newreprepcopier_fichier.c~copier_fichier.cmourad.txttype_file.c~mourad~type_filecopier.ctatos.txlistertype_file.c ./tmp1/copier-rep.c~copiercopier_rep.c~newreprepcopier_fichier.c~copier_fichier.cmourad.txttype_file.c~mourad~type_filecopier.ctatos.txlistertype_file.clister.c~ ./tmp1/copier-rep.c~copiercopier_rep.c~newreprepcopier_fichier.c~copier_fichier.cmourad.txttype_file.c~mourad~type_filecopier.ctatos.txlistertype_file.clister.c~lister.c ./tmp1/copier-rep.c~copiercopier_rep.c~newreprepcopier_fichier.c~copier_fichier.cmourad.txttype_file.c~mourad~type_filecopier.ctatos.txlistertype_file.clister.c~lister.ccopier.c~
alors que je veux avoir un résultat comme:
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ./tmp1/copier_rep.c ./tmp1/copier.c ./tmp1/lister.c ./tmp1/tmp ....
Partager