Manipulation de fichiers en c

Fermé
renaudh Messages postés 138 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 2 septembre 2016 - 15 mai 2005 à 21:05
 BBSOLAR - 7 oct. 2008 à 22:14
Bonjour,

Toujours dans le cadre de mon puissance 4, je dois créer un fichier avec le top 10 des meilleurs joueurs.
Pour le moment, ce top10 est rangé dans un vecteur de type structuré.
struct top10
{
	char top10nom[M];
	int top10tent;
};struct top10 top[T];

donc la variable structurée s'appelle top10, top[t].top10nom représente le nom du meilleur joueur et top[t].top10tent représente le nombre de tentatives pour gagner.

Donc j'aimerais avoir une fonction qui efface le fichier, une qui écrit les données dans le fichier et une qui lit le fichier.

Je sais bien que je demande beaucoup mais je n'ai jamais manipulé de fichier en c et cela n'a pas été vu au cours donc j'ai vraiment besoin d'aide.

Merci
A voir également:

12 réponses

j'ai un probleme comment creer un fichier(les fichiers en c) et fait une adresse pour l'ouvrir en une page excel pour afficher un tableau et les indices de ce tableau sont des indices du programme et merci
0
<et fait une adresse pour l'ouvrir en une> ????
<les indices de ce tableau sont des indices du programme> ????
Je ne comprend pas bien la différence entre indice et adresse
sous excell on peut exporter une feuille en format texte et choisir son formatage abscisse ordonnées avec des caractères de ponctuation comme ; , .
Il y a un problème grammatical dans la formulation de la question ci-dessus qui empêche de comprendre son sens.
Je sais bien que la méthode globale a fait des dégâts, mais ça ne coute rien de relire ce que l on a écrit.
0
j'ai un probleme!!!!comment travailler avec la librairie time.h.... j'ai un travail de trie(rapide,insertion et selection)en c avec les llc et de musuré le temps qui s'écoule dans le trie ...je demande pour m'aider pour travailler avec time.h des exemples de code sourses sur le time.h avec une explication......et une explication sur le travail de trie rapide avec un dessin svp........
0
blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
16 mai 2005 à 15:16
la plupart du temps, apprendre à programmer est une démarche personnelle.
mais la plupart des environements de programmation est documentée par mot clés, et comme il arrive qu'on ne connaisse pas le nom de ce que l on cherche, voici quelques tuyaux:

pour l'ouverture et la ferme ture de fichiers voir :
fopen; fclose


pour le chargement et la sauvegarde de variables sous forme de structure voir :
fread;  fwrite


cordialement
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
renaudh Messages postés 138 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 2 septembre 2016 3
18 mai 2005 à 12:14
Je dois passer une structure à fwrite, j'ai écrit cette fonction:
void ajoutfichier (void)
{
	FILE *file=fopen("E:\Puissance 4\Puissance 4\top10.txt","w");

	if (file == NULL) {
		fprintf(stderr,"Erreur dans l'ouverture du fichier");
		exit(-1);
	}

	fwrite(top,sizeof(top10),20,file);
	
	fclose(file);
}


Pas d'erreurs, le programme se lance, je fais une partie mais le programme se ferme dès que la partie est gagnée, que dois-je corriger?
-1
renaudh Messages postés 138 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 2 septembre 2016 3
18 mai 2005 à 14:05
On me dit de déclarer fopen, voilà à quoi j'arrive:
void ajoutfichier (void)
{
	FILE * fopen(const char *top10, char *mode);

	int fclose(FILE *flot);

	FILE *fichtop10;
	char *mem = (char *)malloc(SIZE);
	int length;
	
	fichtop10=fopen("top10.txt","w");

	if (fichtop10 == NULL) {
		fprintf(stderr,"Erreur dans l'ouverture du fichier");
		exit(-1);
	}
	size_t  fwrite(void *top, size_t 55, size_t 10, FILE *fichtop10);
	
	fwrite(mem,20,length,top);
	
	fclose(fichtop10);
}


Ca donne plein d'erreurs et j'ai vraiment du mal à comprendre le fonctionnement de chaque fonction.
-1
blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
18 mai 2005 à 14:14
bonjour

si le fichier ne peut pas etre modifié
(cdrom, réseau en lecture seule ou autre)
ou bien que le chemin est incorrect,
alors file a pour valeur NULL
et la commande
exit (-1)
fait quitter le programme
a priori je ne peux pas en dire plus

sinon, voilà une petite modif
void ajoutfichier (void)
{
	FILE *file=fopen("E:\Puissance 4\Puissance 4\top10.txt","w");

	if (file == NULL) 
       {
	fprintf(stderr,"Erreur dans l'ouverture du fichier");
	}
       else  /*  seulement si le fichier est ouvert*/
       {
        /* taille de la structure top, 1 element */
	fwrite(top,sizeof(top),1,file);
	fclose(file);
       }

}


un truc important aussi dans fopen , "w" remplace le fichier
existant, alors que "a" permet de rajouter au fichier sans rien effacer
mais ça dépend de ce que tu veux faire.

bon courage
A+
-1
de toute facon mon petit
tu devrais doubler le l'anti-slash que tu as mis dans le code de ton application ok.
0
renaudh Messages postés 138 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 2 septembre 2016 3
18 mai 2005 à 15:48
Je viens de modifier et j'obtiens:
void ajoutfichier (void)
{
	FILE *fichtop10;
	
	fichtop10=fopen("top10.txt","w");

	if (fichtop10 == NULL) {
		fprintf(stderr,"Erreur dans l'ouverture du fichier");
		exit(-1);
	}

	else
		fwrite(top,sizeof(top10),T,fichtop10);
		
	fclose(fichtop10);
}


Pour plus de facilités, il remplacera à chaque fois le fichier et il lui repasse à chaque appel de la fonction tout le vecteur déclarée depuis une structure.
Après exécution du programme et avoir gagner une partie, le fichier est toujours vide donc il n'écrit pas dedans.
-1
renaudh Messages postés 138 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 2 septembre 2016 3
18 mai 2005 à 15:55
J'ai supprimé le exit(-1) mais ça ne change rien.
Comme ceci:
void ajoutfichier (void)
{
FILE *fichtop10;

fichtop10=fopen("top10.txt","w");

if (fichtop10 == NULL)
fprintf(stderr,"Erreur dans l'ouverture du fichier");
else
fwrite(top,sizeof(top10),T,fichtop10);

fclose(fichtop10);
}
-1
blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
18 mai 2005 à 17:26
dans ce cas, si (fichtop10 == NULL)
tu fermes un fichier qui n'a pas été ouvert , d'où plantage
d'autre part on ne voit nulle part la déclaration de T et top10
si ces variables sont des globales, alors la fonction ajoutfichier(void)
n'est pas exportable et n'a que peu d'utilité
-1
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
18 mai 2005 à 16:06
est ca que le message "Erreur dans l'ouverture du fichier" s'affiche???
-1
renaudh Messages postés 138 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 2 septembre 2016 3
19 mai 2005 à 08:36
Non rien ne s'affiche. Le programme se lance et tout va parfaitement mais le fichier texte avec le top10 ne se crée pas.
La fonction d'écriture est:
void ajoutfichier (void)
{
	FILE *fichtop10;
	
	fichtop10=fopen("top10.txt","w");

	if (fichtop10 == NULL) 
		fprintf(stderr,"Erreur dans l'ouverture du fichier");
	else
	{
		fwrite(top,sizeof(top10),T,fichtop10);
		fclose(fichtop10);
	}
}


Fonction de lecture:
void affichetop10 (void)
{
	FILE *fichtop10;
	
	fichtop10=fopen("top10.txt","r");

	if (fichtop10 == NULL)
		fprintf(stderr,"Erreur dans l'ouverture du fichier");
	else
	{
		fwrite(top,sizeof(top10),T,fichtop10);
		fclose(fichtop10);
	}
}


La structure est déclarée en globale car je l'utilise dans beaucoup de fonctions:
struct top10
{
	char top10nom[M];
	int top10tent;
};struct top10 top[T];


Le T est défini est défini en globale car utilisé plusieurs fois aussi:
#define T 10
-1
renaudh Messages postés 138 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 2 septembre 2016 3
19 mai 2005 à 15:35
Dsl pour la ptite erreur mais g bien mis un fread au lieu d'un fwrite dans la fonction "affichetop10" sinon, ya un gros problème à l'école vu que quand je l'exécute à l'école, il crée pas le fichier et chez moi, il le crée.
Le vecteur "top10nom" passe bien mais pas celui pour les tentatives, j'obtiens cela dans mon fichier:
reno ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ  

Et quand je veux afficher le top10, il ne m'affiche rien.
-1