Flusher l'ecriture dans une log

Résolu
Merlinus90 Messages postés 2 Date d'inscription lundi 13 novembre 2006 Statut Membre Dernière intervention 14 novembre 2006 - 13 nov. 2006 à 18:19
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 15 nov. 2006 à 09:25
Bonjour,

Je travaille plutot en VBA, mais ce ne doit pas être trop diférent.....
Je n'arrive pas à trouver sur le net ni nul part, comment vider le tampom memoire lorsque j'ecris dans un fichier de log
Comme les traitements sont longs, les commandes print ne sont executées que lorsque le reste du pgm à fait sont travail : refresh des requetes et generation de HTML.

J'utilise la cde print

Qui peut m'aider ?

Merci d'avance

Merlinus90

5 réponses

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
13 nov. 2006 à 19:47
salut,

à priori, il n'y a pas de moyen de faire ca en VB directement...le plus simple, c'est d'utiliser directement les api sous jacente d'écriture dans un fichier  :
http://www.daniweb.com/techtalkforums/thread19082.html
http://www.freevbcode.com/ShowCode.asp?ID=1689

ShareVB
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
15 nov. 2006 à 09:25
Il faut savoir que, en VB toutes les écritures vers des fichiers sont en réalité écrites dans le tampon du fichier et non pas directement sur le disque. Ensuite c'est Windows qui lorsque le tampon atteint une certaine taille, décide de vider (flusher) le tampon sur le disque dur. Il n'y a pas à ma connaissance de commande simple en VB pour forcer le flushage (à part Close).
La solution sera de passer par les API, comme indiqué dans les liens de ShareVB

Extrait du MP envoyer par Merlinus90 :

Ce qui se passe chez moi, c'est qu'il y a les 1er print mais dès qu'a
lieu la 1ere iteration sur le refresh, les print suivants
n'apparaissent qu'une fois l'itération terminée (instruction loop)

Ci-après en pseudo code ;-):

Main()
{
open fichier_log
print " Début du traitement" >> fichier_log
open fic_config_des_fichiers_à_traiter
until EOF
   print " traiter doc N° i" >> fichier_log
   open doc
   RefreshDoc()
   print " Fin du refresh : ...." >> fichier_log
   SaveDoc()
   print " fin de génération HTML" >> fichier_log
loop
print " fin de traitement" >> fichier_log
close fic_config_des_fichiers_à_traiter
close fichier_log
}

RefreshDoc()
{
  doc.refresh()
  print " tps de refresh : ...."
}

SaveDoc()
{
  doc.saveAsHtml()
  print " tps de génration HTML : ...."
}

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
13 nov. 2006 à 20:35
peut-etre en mettant de temps en temps des doevents dans ton traitement

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
Merlinus90 Messages postés 2 Date d'inscription lundi 13 novembre 2006 Statut Membre Dernière intervention 14 novembre 2006
14 nov. 2006 à 09:14
Salut et merci  !
Pour de la réactivité .... je suis servis ;-P

Maitenant , faudra que je trouve le temps de valider vos idées,  surtout celle de casy.

Alors à bientot,
Bonne continuation
0

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

Posez votre question
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
14 nov. 2006 à 09:26
salut,

oui, doevents peut être mais je pense que ce n'est pas assuré qu'un doevents déclenche obligatoirement le flush...doevents c'est plutôt pour ne pas bloquer l'affichage des forms et les évènements utilisateurs...enfin je crois...

ShareVB
0
Rejoignez-nous