bonjour

j'ai un petit souci avec la fonction fscanf
voila mon cas j'ai besoin d'écrire dans un fichier des adresses de fichier
pour permettre la sauvegarde de celle ci dans une liste entre deux lancement d'un programme

j'ai aussi besoin de charger le fichier au démarrage du programme
et de supprimer des adresses de ce fichier selon les désirs de l'utilisateur du programme

tout marche a peu près sauf lorsque l'utilisateur supprime toutes les adresses du fichier, le bug du programme est : fscanf lit une ligne avec plein de caractères bizard dans le fichier qui est vide ( un cat fichier n'affiche rien )

(j 'ai remarqué que l'utilisation de fgets dans la fonction de lecture corrige une partie du bug mais en créé un nouveau )
voila les deux fonctions
celle de lecture du fichier et celle de suppression de ligne d'adresses


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
 
void chargerListeExclusion(){
 
    FILE *f;
    char *chemin=".liste";
    char ligne[512];
    GtkWidget *combobox;
 
    combobox = (GtkWidget *)gtk_data_list_get_by_name(liste,"listeExclusion"); 
 
    f = fopen(chemin, "r");  /* read */
    if(f!=NULL){
	while (!feof(f)){
 
	    fscanf(f, "%s\n", ligne);
	    fprintf(stderr,"%s\n",ligne);	   
	    gtk_combo_box_append_text(combobox,ligne);
	}
	fclose(f);
    }else{
	fprintf(stderr,"pas de fichier de sauvegarde trouve\n");
 
    }
}
 
 
void supprimerListeExclusion(char *var){
 
    FILE *in,*out;
    char *chemin=".liste";
    char *cheminTmp=".listeTmp";
    char ligne[512];
 
    fprintf(stderr,"on doit supprimer :||%s||\n",var);
 
    out = fopen(cheminTmp, "w"); 
    in = fopen(chemin, "r+");  /* read */
    if(in!=NULL){
	while (!feof(in)){
	    fscanf(in, "%s\n", ligne);
 
	    fprintf(stderr,"ligne courante :||%s||\n",ligne);
 
	    if(!(strcmp(ligne,var)==0)){
		fprintf(stderr,"on recopie :||%s||\n",ligne);
		fprintf(out,"%s\n",ligne);
 
	    }
	}
 
	remove(".liste");
	rename(".listeTmp",".liste");
	fclose(out);
	fclose(in);
    }else{
	fprintf(stderr,"pas de fichier de sauvegarde trouve\n");
 
    }
}