Bonjour,
Je souhaite ouvrir plusieurs fichiers txt afin de concaténer leurs données (et en les modifiant un petit peu - changement et ajout de caractères) dans un même fichier. Mon programme de lecture+modification fonctionne sans problème lorsque je ne lis qu'un fichier, mais lorsque j'en lis plusieurs, la lecture se termine par un "segmentation fault".
Voici le code:
Explication: La première partie permet de compter le nombre de fichiers Vloc_Rloc.OUT dans mon répertoire essai/.
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 #include <string.h> #include <stdio.h> #include <dirent.h> #include <stdlib.h> int main(void) { char *suiteChaine; int cpt=0; int tpc=0; DIR * rep = opendir("/home/mehdi/essai"); if (rep != NULL) { struct dirent * ent; while ((ent = readdir(rep)) != NULL) { cpt++; suiteChaine = strstr(ent->d_name,"Vloc_Rloc"); if (suiteChaine != NULL) { tpc++; } } closedir(rep); } int i; char fname[100]; FILE* suite=fopen("finish.dat","w"); for (i=1;i<=tpc;i++) { sprintf(fname,"/home/mehdi/essai/Vloc_Rloc.OUT.%d",i); FILE* vlocrloc=fopen(fname,"r"); FILE* traitement=fopen("essai.dat","w+"); int c_lu; int c_ecrit; int last=0; while ((c_lu = fgetc(vlocrloc)) != EOF) { c_ecrit = c_lu; if (c_lu == '!') { c_ecrit = ' '; } else if (c_lu == '=') { c_ecrit = ' '; } else if (c_lu == '-') { if(last == 'H') { putchar(' '); putc(' ',traitement); } } else if (c_lu == 'D') { c_ecrit = 'e'; } putchar(c_ecrit); putc(c_ecrit,traitement); last = c_lu; } fclose(vlocrloc); fclose(traitement); } fclose(suite); return 0; }
Ensuite, je lis+modifie les fichiers Vloc_Rloc.OUT.x un par un, et je les écris chacun à leur tour dans le fichier traitement.
Qu'en pensez vous? Est-ce que je dois plutôt tous les lire et les modifier avant d'écrire?
PS: il me semble que le putchar ne rencontre pas de problème, puisque le message segmentation fault apparaît après l'écriture dans le flux de sortie standard (la lecture et la modification apparaissent bien sur mon terminal). L'origine serait donc plutôt le putc, donc l'écriture dans traitement.
Partager