OVH Cloud OVH Cloud

Fichier mouchard

2 réponses
Avatar
Erwan
Bonjour,

Dans le cadre d'un développement d'un serveur, j'aimerais stocké dans un fichier
texte l'ensemble des émissions et réceptions.

Pour éviter de prendre de de place sur le disque j'aimerais, que la taille du
fichier se limite à 2Mo (environ).
Pour cela, si le fichier fait plus de 2Mo, je supprime la première ligne puis
j'ajoute la nouvelle. Voici le code de ma procédure :

PROCEDURE EcritFichierTrace(sz_InfoTrace)

LOCAL
n_IdFichierTrace est un entier
n_posistion est un entier
sz_TexteFichier est une chaîne
Trace("Debut : "+HeureVersChaine(HeureSys()))
SI :mb_ModeTrace ALORS
// On limite la taille à 2 Mo
SI fTaille(:msz_CheminNomFichierTrace) > (2*1024*1024) ALORS
sz_TexteFichier = fChargeTexte(:msz_CheminNomFichierTrace)
SI sz_TexteFichier<>"" ALORS
n_posistion = Position(sz_TexteFichier,RC,DepuisDébut)
sz_TexteFichier = Milieu(sz_TexteFichier,n_posistion+2)
sz_TexteFichier += DateVersChaine (DateSys()) +" "+HeureVersChaine (HeureSys())
+ " " + sz_InfoTrace+CRLF
fSauveTexte(:msz_CheminNomFichierTrace,sz_TexteFichier)
FIN
SINON
// On écrit les informations dans un fichier Trace
n_IdFichierTrace = fOuvre (:msz_CheminNomFichierTrace,foAjout+foCréationSiInexistant)
SI n_IdFichierTrace <> -1 ALORS
fEcrit (n_IdFichierTrace,DateVersChaine (DateSys()) +" "+HeureVersChaine
(HeureSys()) + " " + sz_InfoTrace+CRLF)
fFerme (n_IdFichierTrace)
FIN
FIN
FIN
Trace("fin : "+HeureVersChaine(HeureSys()))

Le problème est que lorsque le fichier dépasse les 2Mo, le temps de traitement
est de 2 dixième de secondes (ce qui est énorme).
Avez-vous des solutions pour réaliser un fichier mouchard correcte ?

Merci par avance

--
Message monitoré par axinews : http://www.axinews.com/

2 réponses

Avatar
Dev
fsauvetexte ?

--
Cordialement
Christophe Charron

Service Développement
PROLOGIQ
7 bis Rue des Aulnes
69410 Champagne au Mont d'Or

Tel : 0 437 499 107
Fax : 0 437 499 105
mailto:

"Erwan" a écrit dans le message de
news:432ec5bb$0$29670$
Bonjour,

Dans le cadre d'un développement d'un serveur, j'aimerais stocké dans un


fichier
texte l'ensemble des émissions et réceptions.

Pour éviter de prendre de de place sur le disque j'aimerais, que la taille


du
fichier se limite à 2Mo (environ).
Pour cela, si le fichier fait plus de 2Mo, je supprime la première ligne


puis
j'ajoute la nouvelle. Voici le code de ma procédure :

PROCEDURE EcritFichierTrace(sz_InfoTrace)

LOCAL
n_IdFichierTrace est un entier
n_posistion est un entier
sz_TexteFichier est une chaîne
Trace("Debut : "+HeureVersChaine(HeureSys()))
SI :mb_ModeTrace ALORS
// On limite la taille à 2 Mo
SI fTaille(:msz_CheminNomFichierTrace) > (2*1024*1024) ALORS
sz_TexteFichier = fChargeTexte(:msz_CheminNomFichierTrace)
SI sz_TexteFichier<>"" ALORS
n_posistion = Position(sz_TexteFichier,RC,DepuisDébut)
sz_TexteFichier = Milieu(sz_TexteFichier,n_posistion+2)
sz_TexteFichier += DateVersChaine (DateSys()) +" "+HeureVersChaine


(HeureSys())
+ " " + sz_InfoTrace+CRLF
fSauveTexte(:msz_CheminNomFichierTrace,sz_TexteFichier)
FIN
SINON
// On écrit les informations dans un fichier Trace
n_IdFichierTrace = fOuvre


(:msz_CheminNomFichierTrace,foAjout+foCréationSiInexistant)
SI n_IdFichierTrace <> -1 ALORS
fEcrit (n_IdFichierTrace,DateVersChaine (DateSys()) +" "+HeureVersChaine
(HeureSys()) + " " + sz_InfoTrace+CRLF)
fFerme (n_IdFichierTrace)
FIN
FIN
FIN
Trace("fin : "+HeureVersChaine(HeureSys()))

Le problème est que lorsque le fichier dépasse les 2Mo, le temps de


traitement
est de 2 dixième de secondes (ce qui est énorme).
Avez-vous des solutions pour réaliser un fichier mouchard correcte ?

Merci par avance

--
Message monitoré par axinews : http://www.axinews.com/



Avatar
Erwan
A priori la solution la plus simple serait d'avoir un fichier hiostorique par
jour et de supprimer les fichier de plus de 7 jours. Ce qui nous donne lme code
suivant :

PROCEDURE EcritFichierTrace(sz_InfoTrace)

LOCAL
n_IdFichierTrace est un entier
n_posistion est un entier
sz_TexteFichier est une chaîne
sz_NomFichier est une chaîne
sz_NomFichierASupprimer est une chaîne
sz_DateFichier est une chaîne


SI :mb_ModeTrace ALORS
Trace("Debut : "+HeureVersChaine(HeureSys()))

sz_NomFichier = :msz_CheminNomFichierTrace+DateSys()+".txt"
SI PAS fFichierExiste(sz_NomFichier) ALORS
// on supprime les fichiers précédents (historique sur 7 jours)
sz_NomFichierASupprimer = fRep(:msz_CheminNomFichierTrace+"*.txt", frFichier)
TANTQUE sz_NomFichierASupprimer <> ""
sz_DateFichier = Gauche(Droite(sz_NomFichierASupprimer,12),8)
SI DateValide(sz_DateFichier) ALORS
SI DateDifférence(sz_DateFichier,DateSys()) > 7 ALORS
fSupprime(sz_NomFichierASupprimer)
FIN // si DateDifférence(sz_DateFichier,datesys()) > 7 ALORS
FIN // si datevalide(sz_DateFichier) ALORS
sz_NomFichierASupprimer = fRep("", frFichier)
FIN // TANTQUE sz_NomFichierASupprimer <> ""
FIN // si pas ffichierexiste(sz_NomFichier) ALORS

// On écrit les informations dans un fichier Trace
n_IdFichierTrace = fOuvre (sz_NomFichier,foAjout+foCréationSiInexistant)
SI n_IdFichierTrace <> -1 ALORS
fEcrit (n_IdFichierTrace,DateVersChaine (DateSys()) +" "+HeureVersChaine (HeureSys())
+ " " + sz_InfoTrace+CRLF)
fFerme (n_IdFichierTrace)
FIN

Trace("fin : "+HeureVersChaine(HeureSys()))
FI

--
Message monitoré par axinews : http://www.axinews.com