Erreur relative a fopen/fclose

Soyez le premier à donner votre avis sur cette source.

Vue 4 047 fois - Téléchargée 122 fois

Description

Bon, voila deux fonctionx qui gere la gestion des erreurs des fonction :
  • fopen
  • fclose

Source / Exemple :


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

/**********************************************************/
/* fonction qui ouvre un fichier */
/**********************************************************/
FILE *MyFileOpen(char *name,char *mode)
{
FILE *f;

/* on ouvre le fichier */
f = fopen(name,mode);

printf("Ouverture du fichier '%s' en mode '%s' : ",name,mode);

/* s'il y a eu une erreur */
if(f == NULL)
	{
	printf("echouee !\n");
	/* on quitte */
	getch();
	exit(1);
	}

/* l'ouverture a reussi */
printf("reussie !\n");
return f;
}

/**********************************************************/
/* on ferme le fichier */
/**********************************************************/
void MyFileClose(FILE *f)
{
printf("Fermeture du fichier : ");

/* on ferme le fichier et on teste sa valeur de retour */
if(fclose(f) == EOF)
	{
	printf("echouee !\n");
	/* on quitte */
	getch();
	exit(1);
	}

/* la fermeture a reussi */
printf("reussie !\n");
}

/**********************************************************/
/**********************************************************/
/**********************************************************/
int main(int argc,char **argv)
{
FILE *f;

printf("------------------------------------\n");

/* TOUT MARCHE BIEN */
f = MyFileOpen("coucou.txt","wt");
printf("Ici vous ecrivez ce que vous voulez ...\n");
MyFileClose(f);

/* NE MARCHE PAS */
f = MyFileOpen("inexistant.txt","rt");
MyFileClose(f);

getch();
return 0;
}

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
4
Oui mais ...

Je veux dire (amicalement) que tant que l'on ne fais pas des malloc trop gros, il est rare mais cela arrive, que le malloc retourne NULL, donc je peux me permettre dans chacun de mes programme, quitter des qu'il y a une erreur !

Bon voila c'est tout !
A moi, c'est vachement utile !
Toi tu en fais ce que tu veux

JCDjcd
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
9 novembre 2007
1
bon je t'explque...

malloc est une fonction de la lib standard

xmalloc est une fonction qui sur-couche malloc, on est toujours d'accord ??

mnt, il serais stupide d'ecrire une fonction qui sur-couche xmalloc

de plus une fonction qui prendra trop de sur-couche, comme tu dis quil est mieux de faire, tendra etre plus dupliquer car pour certaines taches, elle fera trop de travail, et donc plein de truc inutile...

il te faudra donc copier cette fonction et enlever des choses, ce qui n'est pas tres logique, je pense quil est mieux de surcoucher au minimum, et ensuite de rajouter les specificiter la ou on en a besoin

enfin bon... je pense que nous devrions clore la discution ici car nous derivons mechament du sujet, et de plus, elle ne mene nul part, personne n'as tord, personne n'as raison, juste des point de vue divergent dont on a deja suffisement parler

:)
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
4
Faux !
Les sur-couche ont tres souvent plus de parametres !
Logique, elle sont plus puissate, et peuvent faire plus de choses !
Donc moi je pense qu'elle devrait avoir plus d'argument !


je cite : "aussi le prend pas mal, mais il faut vraiment etre stupide pour surcoucher une fonction deja surcoucher, je ne voit vraiment pas a quoi sa sert, et ni pourquoi le faire"

apparement la fonction est DEJA sur-couchee, ... OU ??
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
9 novembre 2007
1
> exit(1);
> Mais c'est juste une convention !

ah bon ? d'ou, depuis quand ?

> Sinon pourquoi le exit prend un valeur ... c'est juste pour faire
> joli !??

mdr, parceque 0 c'est pas une valeur ?

> Et je n'ai pas compris : il ne vaut pas nommer un fonction avec des
> majuscules ??

il me semble avoir ecrit "la norme ansi n'interdit pas, mais preconise fortement de ne pas utiliser de majuscule pour definir des nom de fonctions"

donc si tu avais lu correctement, tu aurais su que je n'ai pas dit que c'est interdit, mais que c'est deconseiller

> Et pour imfomation : la fonction xmalloc ou xfopen ou encore
> xfclose N'EXISTE PAS !!!!!!!!!!

ah bon ?? bah je savais pas...

biensure qu'elle n'existe pas, c'est a nous de les re-ecrire, encore une fois, si tu avais lu correctement, tu aurais vu que j'ai dit que la norme ansi preconise de mettre un x devant les fonctions secure qu'on a re-ecrit, et personne n'interdit de rajouter les gestions d'erreurs et autres dedans

c'est juste quil est preferable d'eviter de modifier les parametres originaux

void *malloc(size_t size);
void *xmalloc(size_t size);

ni plus, ni moins
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
4
exit(1);
Mais c'est juste une convention !
Sinon pourquoi le exit prend un valeur ... c'est juste pour faire joli !??



Mais je suis tout fais d'accord sur ce point : il faut factoriser la gestion des erreurs au maximum !

Et je n'ai pas compris : il ne vaut pas nommer un fonction avec des majuscules ??

Et pour imfomation : la fonction xmalloc ou xfopen ou encore xfclose N'EXISTE PAS !!!!!!!!!!


he oui peut etre que chez toi ca existe, mais sur d'ancien compilateur ... il connait pas ! en revanche malloc est plus portable !
De plus il est plus agreable de le faire soit meme, car dans un gros projet si on veut traiter le erreurs nous-meme (car on est bien oblige) il faut reecrire la fonction, en plus je peux a mon gre rajouter des fonctionnalite ... du genre la ligne et le fichier dans lequel c'est produit l'erreur ... pour situer l'appelant ! chose qu'il n'y a pas avec le xmalloc pre-programmer !
le xmalloc c'est pour les petits projets ...
Un exemple similaire : la fonction random : pour le petit programme c'est tres bien, pour les debut en C aussi ... mais pour des vraie probleme qui ont besoin de random (un bon exemple est le calcul d'un volume dans l'espace) ... he bien il s'avere que la fonction random est HORRIBLEMENT nulle ! l'algorithme est tres bof !
Tout ca pour dire qu'il faut mieux des fois reecrire certaines sur-couche plus appropriees !


Cordialement JCDjcd.
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.