Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

POUR LE DEBUG,LES TRACES... : SAVETOERRORLOG OU AJJOUT DE TEXTE DANS UN FICHIER...


Information sur la source

Catégorie :Astuces Niveau : Débutant Date de création : 15/01/2004 Vu : 1 719

Note :
3 / 10 - par 3 personnes
3,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

Description

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

  • 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);
  • }
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);
}

Commentaires et avis

signaler à un administrateur
Commentaire de vecchio56 le 15/01/2004 18:11:45 administrateur CS

en fait tu ne fais rien d'autre que d'écrire dans stderr, je ne vois pas tout a fait l'interet

signaler à un administrateur
Commentaire de magic_Nono le 15/01/2004 18:41:34

G js dit que CT une grosse fonction mais ... que C un truc utile sans se préoQP de l'ouverture/fermeture du fichier...

une fonction simple de niveua 1!

signaler à un administrateur
Commentaire de Matt67 le 15/01/2004 21:21:26

Bonsoir,

fopen((char*)nomFichier,"at");

Apparement tu ouvres ton fichier en "append". le 't' c'est quoi ?
Pourquoi tu fais un :

fseek(fichier,0,SEEK_END);

Matt...

signaler à un administrateur
Commentaire de magic_Nono le 16/01/2004 16:47:33

Matt&gt; 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&gt; 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.

signaler à un administrateur
Commentaire de Matt67 le 16/01/2004 17:54:32

Bonsoir,

Matt&gt; 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...

signaler à un administrateur
Commentaire de magic_Nono le 18/01/2004 22:36:43

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.

signaler à un administrateur
Commentaire de magic_Nono le 18/01/2004 23:05:48

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.

signaler à un administrateur
Commentaire de magic_Nono le 13/05/2004 12:38: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.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,31 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.