Pour le debug,les traces... : savetoerrorlog ou ajjout de texte dans un fichier...

4/5 (8 avis)

Snippet vu 3 648 fois - Téléchargée 28 fois

Contenu du snippet

Voilà la fonction de trace très utile pour avoir une trace sans faire de débug...
Elle permet d'envoyer une chaine dans un fichier tout simplement en fait mais vu qu'elle sert très souvent et que beaucoup de mes collègues me l'on déjà copiée... pas de pb pour la publier...

Elle marche aussi bien en C qu'en C++...
En Gal, en C++, je la laisse comme seule fonction globale...

Voici son proto:
void saveToErrorLog(char* message, char* nomFichier)

et donc, on peut envoyer le contenu des variables, un message si on passe à certains endroit du code...

Rq: Cette fonction est utilisée dans le module Trace de MétaProg (rq: MétaProgLight sera très prochainement publié sur ce site...)

Voila...
@+,
Nono

Source / Exemple :


void saveToErrorLog(char* message, char* nomFichier)
{
/// ---------------------------------------------------------------------------------
/// ---------------- saveToErrorLog(char* message ,char* nomFichier) ----------------
/// ---------------------------------------------------------------------------------
/// -----  Objectif	: Ecriture d'une trace ds un fichier
/// -----  Auteur(s)	: Magic Nono 26/04/02 & 26/08/03
/// -----  PreCond	: /
/// -----  PostCond	: Trace insérée en fin de fichier
/// -----  Etat		: 1			(-1<0<1<2)
/// ---------------------------------------------------------------------------------
/// -----  char* message	: cf.nom
/// -----  char* nomFichier(par défaut : '"trace.b"')	: cf.nom
/// ---------------------------------------------------------------------------------
/// -----  Var Muettes (cf.partie préc) (2)	: message ,nomFichier
/// -----  Var Internes à la fonction (1)	: fichier
/// -----  Var In  (2)	: message ,nomFichier
/// -----  Var In  Globales Constantes (1)	: SEEK_END
	//pas de trace
	FILE*fichier;
	if((fichier= fopen((char*)nomFichier,"at")) == NULL)
	{
		fprintf(stderr,"erreur durant l'ouverture du fichier %s.\\n\\n",nomFichier);
		exit(5);	//pas PB ici...
	}
	fseek(fichier,0,SEEK_END);
	fputs(message,fichier);
	fputc('\\n',fichier);
	fclose(fichier);
}

A voir également

Ajouter un commentaire Commentaires
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 1
13 mai 2004 à 12:38
Dsl d'avoir mis lgt à reprendre cet échange,

le t est une option mise par défaut qui était à préciser au début du C...

voici ce qu'en disent les MSDN:

t
Open in text (translated) mode. In this mode, CTRL+Z is interpreted as an end-of-file character on input. In files opened for reading/writing with "a+", fopen checks for a CTRL+Z at the end of the file and removes it, if possible. This is done because using fseek and ftell to move within a file that ends with a CTRL+Z, may cause fseek to behave improperly near the end of the file.
Also, in text mode, carriage return–linefeed combinations are translated into single linefeeds on input, and linefeed characters are translated to carriage return–linefeed combinations on output. When a Unicode stream-I/O function operates in text mode (the default), the source or destination stream is assumed to be a sequence of multibyte characters. Therefore, the Unicode stream-input functions convert multibyte characters to wide characters. For the same reason, the Unicode stream-output functions convert wide characters to multibyte characters.


Nono.
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 1
18 janv. 2004 à 23:05
apparement man de linux ne connait pas... Je pense qd mm pas avoir inventé ce truc (qui ne pose pas de pb d'ailleur...)
rq: le 'b' est ignoré sur ts les sys POSIX(dont Linux... Je ne C plus pour windows...)
et le 'b' est conseillé tt de mm

je consulte la bible (de Bjarne Stroustrup) et je vs tiens au courant...

@+
Nono.
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 1
18 janv. 2004 à 22:36
peut-etre que "t" est par défaut...
affaire a suivre
en tt cas C ce que j'avais eu en cours et je l'ai tjs spécifié...
@+
Nono.
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
16 janv. 2004 à 17:54
Bonsoir,

Matt> le t C pour txt.
Ah bon, connait pas (pas standard)
disons que si on veut ouvrir un fichier en binaire on met b et en texte on ne met rien.
Si je me trompe qu'on me le dise...

Matt...
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 1
16 janv. 2004 à 16:47
Matt> le t C pour txt
C vrai... pq le fseek qui a priori fait la mm chose...
euh.. je V tester ce WE et je te dis la sem prochaine...
ça se trouve, C redondant...
Bonne rq en tt cas!


Vecchio> on n'utilise pas tjs une interface DOS ... on a évolué depuis et cette fonction permet également de désigner plsr fichiers... (certes, ds le .h, j'en ai mis un par défaut)

Magicalement,
Nono.
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.