Comment enregistrer des fichiers au fur et à mesure dans une boucle do en VBnet

Signaler
Messages postés
16
Date d'inscription
jeudi 7 juillet 2011
Statut
Membre
Dernière intervention
22 juin 2012
-
Messages postés
16
Date d'inscription
jeudi 7 juillet 2011
Statut
Membre
Dernière intervention
22 juin 2012
-
Bonjour
en VBnet : A l'intérieur d'une boucle do, comment enregistrer des fichiers.txt au fur et à mesure de leur conception.
Après avoir essayé sans résultat, tous les fichiers.txt créés, sont enregistrés en série dès la fin de la boucle do.
J'ai l'impression que tout reste dans le buffer, jusqu'à la fin de cette boucle, et qu'ensuite toute cette mémoire se vide en une seule fois pour enregistrer tous les fichiers.
Ce que j'aimerais bien réussir à faire , c'est de pouvoir arreter le programme quand je le décide, et donc d'avoir déja quelques fichiers enregistrés dans le disque dur, du moins tous ceux qui ont été réalisés avant cet arret volontaire.
Merci à l'âme charitable qui me viendra en aide.

12 réponses

Messages postés
14761
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 janvier 2021
151
Bonjour,

Quel code utilises-tu ?
As-tu regardé Io.File.AppendText ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut

pas compris ce que tu veux faire
tu veux écrire dans un fichier ?
Messages postés
16
Date d'inscription
jeudi 7 juillet 2011
Statut
Membre
Dernière intervention
22 juin 2012

Encore merci de vous interesser à ma demande, j'en suis très content.

Je vous traduis ici une façon synthétique de mon programme

'''''''''''''''''
' appel au sub mettant toutes les variables à jour
call ConditionDepart
Do While NbreJeuReal < NbreJeuDemande
' appel au sub pour phase niveau 1
Call PhaseNiv1()
If NiveauDemande <= TotNiv Then
'on enregistre cette fiche
Jeu(1) = ResultatNiv1
'enregistrement de chaque nouveau fichier.txt
Call EnregNouvelleFiche(TotNiv)
NbreJeuReal = NbreJeuReal + 1
end if
' appel au sub mettant toutes les variables à jour
call ConditionDepart
Loop
'''''''''''''''''
Tant qu'on est dans la boucle; aucun fichier n'est enregistré , tout reste stocké dans le buffer, je pense.
Et lorsque le programme sort de la boucle, tous les fichiers s'enregistrent les uns à la suite des autres sans interruption, et donc je pense que le buffer se vide en enregistrant tout ce qui a été créé.
J'aimerais pouvoir enregistrer les fichiers dans le disque dur, au fur et à mesure, de chaque appel au sub EnregNouvelleFiche(TotNiv).
Comme le traitement est assez long, j'aimerais pouvoir arreter son déroulement, quand je le désire. Le fait que rien ne s'enregistre avant la fin du programme me fait perdre tous ces fichiers, qui n'ont pas pu etre enregistrés avant cette fermeture.
Messages postés
14761
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 janvier 2021
151
Bonjour,

Quand tu postes un code, regardes le point 2 de ma signature.
Je ne vois aucun accès aux fichiers dans ton morceau de code.

Note : Les Call ne servent à rien.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site

Bonjour,

Pas sûr de bien comprendre mais :

Écrire un fichier texte:

Il y a un exemple dans l'aide (il est dans VB10 et l'était dans VB 2005)

Chercher Texte, soit dans l'onglet "Index", soit dans la case en haut à droite du programme d'aide.

Toujours dans l'aide:

Classes Stream, StreamWriter, System.IO

Bonjour,

En ajout à ma réponse précédente.

Si ton objet Stream s'appelle Alouette, Alouette.close va forcer l'écriture du fichier et la purge de la mémoire-tampon.
Messages postés
16
Date d'inscription
jeudi 7 juillet 2011
Statut
Membre
Dernière intervention
22 juin 2012

En reponse à cmarcotte, mon Stream SW est fermé à la fin par SW.Close()
et pourtant la mémoire ne se purge pas au fur et à mesure des appels à ce Sub pour enregistrer les nouveaux fichiers.
Je ne comprends pas pourquoi l'ensemble des fichiers est uniquement enregistré dans le DD lorsque sa condition de la boucle Do est atteinte et donc comme je le dis dans mon précédent message, ne me permet pas d'arret volontaire sans perdre ces nouveaux fichiers qui n'ont pas été encore enregistrés.
Donc W.Close() seul, ne permet pas le forçage des enregistrements, je ne vois pas où est mon erreur et surtout, je ne sais pas quoi faire pour y remédier.

Je vous envoie un bout de mon code où il doit surement y avoir une anomalie

Imports System.IO
------------------------------
Module Module1

Public Sub EnregNouvelleFiche(TotNiv) 
.
. 'ici je passe les opérations qui sont effectuées
. 'qui n'ont pas de rapport avec ma demande
.
Dim CheminFich, AppPath, LigInterm  As String
Dim j as integer
AppPath = Environment.CurrentDirectory 

CheminFich = AppPath & "" & NomNouvFich
'Rappel : La variable Public "NomNouvFich" est à chaque fois differente

Dim SW As New StreamWriter(CheminFich) ' crée le fichier
For j = 1 To 10
   LigInterm = """" & Jeu(j) & """"            
   SW.WriteLine(LigInterm)
Next
SW.Close() 'C'est ici qu'il faut forcer l'enregistrement

End Sub

Bonjour,

À première vue, cela me semble une procédure correcte. Une idée comme cela : Si on met un point d'arrêt sur le End Sub, est-ce que le fichier texte ainsi créé est lisible dans le bloc-notes? Si oui, cela serait que le programme s'exécute peut-être trop rapidement pour que Windows ait le temps de terminer l'enregistrement. Sinon, il faudrait chercher ailleurs. (Au moment où j'écris ces lignes, il devrait être presque 18 h 30 à Paris. (10 h 27 chez-nous))

Rebonjour

Et en ajoutant sw.flush juste avant sw.close ?

Sinon, en fouillant dans l'aide de VB 10, j'ai remarqué, mais pas testé, que la classe System.io.filestream permettrait de spécifier si l'on veut travailler en mode synchrone ou en mode asynchrone.
Messages postés
14761
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 janvier 2021
151
Bonjour,

Actives Option Strict et Option Explicit (propriétés du projet), dans l'onglet "Références", retires l'import automatique de Microsoft.VisualBasic et corriges les erreurs.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
16
Date d'inscription
jeudi 7 juillet 2011
Statut
Membre
Dernière intervention
22 juin 2012

Bonsoir NHenry
Je vais essayer ta proposition qui va peut être me convenir.
Mais du point de vue "correction" il est vrai que j'ai fort à faire avant de pouvoir la tester.
Il y a même des corrections pour lesquelles je ne sais pas trop si je vais pouvoir m'en sortir.
Mais j'ai tellement essayé de solutions qui ne m'ont pas satisfait, que je tiens absolument à tester la tienne qui a un vrai parfum de nouveauté pour moi, et sur laquelle je mets tous mes espoirs.
Entre temps, je reste toujours pret à accepter d'autres propositions.
J'espère transmettre un résultat très prochainement.
...encore merci
Messages postés
16
Date d'inscription
jeudi 7 juillet 2011
Statut
Membre
Dernière intervention
22 juin 2012

Rebonjour cmarcotte
Tu dis que la classe System.io.filestream permettrait de spécifier si l'on veut travailler en mode synchrone ou en mode asynchrone.
Là aussi, il y a peut etre à creuser, mais j'avoue mon incapacité à utiliser cette possibilité.
J'ai commencé à chercher à me documenter, sans obtenir de résultat pour l'instant.
Donc avec la proposition de NHenry, me voilà devant deux voies bien distinctes mais toutes deux interessantes.
Alors au boulot, faut que je m'y mette !!!
bye