Erreur de reecriture dans un fichier [VB.Net] - thread-safe [Résolu]

Messages postés
113
Date d'inscription
vendredi 5 mars 2004
Statut
Membre
Dernière intervention
11 février 2008
- - Dernière réponse : capuccino_fr
Messages postés
113
Date d'inscription
vendredi 5 mars 2004
Statut
Membre
Dernière intervention
11 février 2008
- 7 janv. 2005 à 16:37
Bonjour à tous,

je code en vb .net. et j'ai besoin d'aide, svp
Je cree un fichier de log pour une appli, que je veux relire apres , dans une form qui pourra me donner les journaux par date. Ca fonctionnait tres bien jusqu'a ce que j'inclue de nouvelles mises a jour dans cette application, et qui me donnennt un resultat:
"Le processus ne peut pas acceder au fichier "...\rapport.log" car il est en cours d'utilisation par un autre processus". Je ne comprends pas, meme en debuggage je referme bien mon streamreader, avant de vouloir l'effacer.

Voici le bout du code qui pose probleme:

File.Create(dossier_Rapport & "\RapportTmp.log")
Dim journal As StreamReader = File.OpenText(dossier_Rapport & "\Rapport.log")
'Wait(10)
Do
buffer = journal.ReadLine()
If buffer <> "" Then
If InStr(buffer, "Journal au :") Then
Dim i As Integer = buffer.IndexOf(":")
Dim dateJournal As String = buffer.Substring(i + 2, 10)
If DateDiff(DateInterval.Day, CDate(dateJournal), Now) > 30 Then
Do
buffer = journal.ReadLine
Loop Until InStr(buffer, "--------------") <> 0
Else
Dim journalTmp As StreamWriter = File.AppendText(dossier_Rapport & "\RapportTmp.log") // on ouvre un streamwriter temporaire
Do
journalTmp.WriteLine(buffer)
buffer = journal.ReadLine
Loop Until InStr(buffer, "--------------") <> 0
journalTmp.WriteLine("---------------------------------------------------")
journalTmp.Close() // on ferme a chaque fois le temporaire
Wait(5)
End If
End If
End If
Loop Until buffer Is Nothing
journal.Close() // LA JE FERME BIEN LE STREAMREADER NON????
Wait(5)
...

le wait (si vous vous demandez ce que c'est):
Private Shared Sub Wait(ByVal n As Integer)
For i As Integer = 1 To n
System.Threading.Thread.Sleep(1)
Application.DoEvents()
Next
End Sub

Et donc, je ne sais plus quoi faire, je dois bientot rendre cette appli
pas cool, donc

je me demandais si ca n'avait pas quelquechose a voir avec ce qui est appelé "thread safe" et tout ca.
Si l'un d'entre vous peut m'eclairer a ce sujet, ce serait cool.

MERCI D'AVANCE
Vaut mieux etre bourré que con: ca dure moins longtemps...
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
11
3
Merci
Salut, déjà si tu rencontre des erreurs c'est qu'un utilisateur pourra aussi en rencontré, donc place le tout dans un Try Catch Finally comme ceci :

Dim journal As StreamReader = File.OpenText(dossier_Rapport &amp; "\Rapport.log")

'Wait(10)

Try
   Do
      buffer = journal.ReadLine()

      If buffer <> "" Then

         If InStr(buffer, "Journal au :") Then

               Dim i As Integer = buffer.IndexOf(":")
               Dim dateJournal As String = buffer.Substring(i + 2, 10)

               If DateDiff(DateInterval.Day, CDate(dateJournal), Now) > 30 Then
                  Do
                     buffer = journal.ReadLine
                  Loop Until InStr(buffer, "--------------") <> 0
               Else

                  Try
                     Dim journalTmp As StreamWriter = File.AppendText(dossier_Rapport &amp; "\RapportTmp.log") // on ouvre un streamwriter temporaire

                     Do
                        journalTmp.WriteLine(buffer)
                        buffer = journal.ReadLine
                     Loop Until InStr(buffer, "--------------") <> 0

                     journalTmp.WriteLine("---------------------------------------------------")

                  Catch ex2......
                     messagebox.shox(ex2.tostring)
                  Finally
                     journalTmp.Close() // on ferme a chaque fois le temporaire
                  End Try

                  Wait(5)
               End If
            End If
         End If
         
         Loop Until buffer Is Nothing

   catch ex.......
      messagebox.show(ex.tostring)
   Finally
         journal.Close()

   End Try

Wait(5)



Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 220 internautes nous ont dit merci ce mois-ci

Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
11
3
Merci
Petite correction :

Try
   Dim journal As StreamReader = File.OpenText(dossier_Rapport &amp; "\Rapport.log")

   'Wait(10)

   .
   .
   .


Au tout début du code que j'ai noter

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 220 internautes nous ont dit merci ce mois-ci

Messages postés
113
Date d'inscription
vendredi 5 mars 2004
Statut
Membre
Dernière intervention
11 février 2008
0
Merci
Merci bien, ca va m'aider, mais j'ai trouvé une autre erreur de fermeture dans une procedure d'initialisation d'un autre form, qui n'etait pas sensé influer ici, ou alors me donner une erreur lors de l'instanciation d'un nouveau streamreader.
Lorsque j'avais essayé d'inserer un autre try catch dans celui ci j'avais eu une erreur, donc je me suis dit que ce n'etait pas possible. Le finally, je ne l'ai pas utilisé mais c'est bien pratique effectivement.
J'ai commencé le.net cette annéé, donc j'ai plein de fonctions a decouvrir et a apprendre

Merci beaucoup encore Chris

Vaut mieux etre bourré que con: ca dure moins longtemps...