bonjour,
Pour réviser un peu j'ai voulu me faire un programme très simple utilisant fread et fwrite... pour prendre une structure d'un fichier, la mettre en binaire dans un autre fichier, prendre ce binaire, le mettre en texte dans un fichier et la lire, voici mon code :

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
 
 
#include <stdio.h>
#include <stdlib.h>
#define MAXN 10
#define MAXP 10
 
struct etud_s // la structure d'un étudiant
{
	char nom[MAXN];
	char prenom[MAXP];
};
 
struct etud_s tabetud;  //la structure qui me servira pour lire et ecrire
 
void edition ( struct etud_s tab, char filename[] ) // pour écrire dans tabetud
{
	FILE *datei;
	datei=fopen ( filename,"w" );
 
	printf ( "\ndonner le nom\n" ); // on met tout simplement ce que l'on veut dans tabetud
	scanf ( "%s",&tab.nom );
	fprintf ( datei,"%s\t",tab.nom );
	printf ( "donner le prenom\n" );
	scanf ( "%s",&tab.prenom );
	fprintf ( datei,"%s",tab.prenom ); // sauvegarde dans un fichier.txt OK
	fclose ( datei );
}
 
void speicher ( char output[],char input[] ) // enregistrement en binaire
{
 
	FILE *foutput;
	FILE *finput;
	foutput=fopen ( output,"wb" ); 
	finput=fopen ( input,"rb" ); // on prends notre fichier txt
 
	fwrite ( finput, sizeof ( struct etud_s ),1,foutput ); //on crée le binaire avec simplement ma structure
}
 
void lecture ( char input[], char output[],struct etud_s etud ) // pour lire à partir du binaire.. c'est LA que ça foire
{
	FILE *finput;
	FILE *foutput;
	finput=fopen ( input,"rb" ); // j'ouvre mon binaire et je vais créer un .txt
	foutput=fopen ( output,"wb" );
	fread ( finput, sizeof ( struct etud_s ),1,foutput ); //je lis donc depuis mon binaire une structure, et je la met dans un .txt
	fscanf ( foutput, "%s",&etud.nom ); // pour afficher ensuite le .txt
	fscanf ( foutput,"%s",&etud.prenom );
	printf ( "\n le nom est : %s",etud.nom );
	printf ( "\n leprenom est : %s",etud.prenom );
}
 
int main()
{
	edition ( tabetud,"edition" ); // edition contient bien ce que j'ai mis dans tabetud
	speicher ( "speicher","edition" ); //speicher contient "quelque chose" du binaire donc !
	lecture ( "speicher","lecture",tabetud ); //lecture ne contient rien.. la lecture ne se fait donc pas bien...
 
	return EXIT_SUCCESS;
}
je précise que je n'ai pas fait de teste d'ouverture de fichier pour aller plus vite car je suis certain qu'il n'y a pas de soucis là dessus, j'utilise vraissemblablement mal fread ou fwrite... mais où j'ai remanié tout ça toute la soirée sans trouver mon erreur...

merci