StreamWriter bloque l'écriture [Résolu]

- - Dernière réponse :  Utilisateur anonyme - 4 août 2013 à 23:08
Bonjour,
je suis en train d'essayer de créer un petit contrôle parental. Cependant, j'ai un problème avec l'écriture des logs des mots tapés. J'ai crée mon code qui compare la liste des mots interdit (exemple : drogue, alcool...) avec les logs.
L'écriture des logs et la comparaison se fait avec un timer qui appel la fonction.
Cependant, lorsque l'écriture des logs se fait pour la deuxième fois, troisième ... Le fichier logs est "occupé par une autre application". Je ne vois pas d'où peut venir le problème.
J'espère que vous pourrez m'éclairer.
Try

            Do

                Dim EcritureLogs As StreamWriter = New StreamWriter("C:\Logs.txt")
                EcritureLogs.Write(TextBox1.Text)
                EcritureLogs.Close()

                MotListe = StreamReaderListeMots.ReadToEnd
                StreamReaderListeMots.Close()

                'on verifie si ligne n'est pas vide
                If MotListe = String.Empty Then

                    Exit Do
                End If

                If MotDansLogs.Contains(MotListe) Then
                    TextBox1.Clear()
                    MotDansLogs = Nothing

                    Call ScreenShot(PictureBox1)

                    Dim ThreadEnvoiMail As New Threading.Thread(AddressOf EnvoiMail)
                    ThreadEnvoiMail.Start()

                    'METTRE CODE ENVOI DES LOGS !
                    'CORRIGER LE BUG DE DETECTION LISTE DES MOTS SI PLUSIEURS MOTS

                End If
            Loop Until MotListe = String.Empty

        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try

Merci :ccool:
Afficher la suite 

10 réponses

Messages postés
14501
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 juillet 2019
131
0
Merci
Bonjour,

A la place d'utiliser StreamWriter, tu peux toujours utiliser Io.File.AppendAllText, WriteAllLines, ...

v----Signature--------v----------------------------------------------

* Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.
* Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).
* En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).
* 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


---
Mon site
Commenter la réponse de NHenry
0
Merci
Bonjour NHenry,
j'ai essayé d'utiliser les méthodes que tu m'a donné, malheureusement ça ne fonctionne pas, mais je me demande si ce n'est pas à cause du code du keylogger qui me permet d'écrire les mots tapés dans le fichier logs car lorsque je fais du pas à pas, VisualStudio tourne uniquement dans le module du keylogger (prit sur vbfrance):
http://www.vbfrance.com/codes/KEYLOGGER-VB-NET-2008-V9-CLASS-HOOK-CLAVIER_49352.aspx
Merci de ton aide.
Commenter la réponse de Utilisateur anonyme
0
Merci
Bonjour NHenry,
est-ce que je peux t'envoyer mon projet car je bloque encore, et cela fait déjà quelques mois. Peut être arrivera tu à trouver le problème ?
Merci d'avance.
Commenter la réponse de Utilisateur anonyme
Messages postés
14501
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 juillet 2019
131
0
Merci
Bonjour,

Essayes plutôt de mettre le message qui t’as aidé en "réponse résolue" et ouvrir un sujet (si pas assez proche pour ta nouvelle question.

v----Signature--------v----------------------------------------------

* Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.
* Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).
* En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).
* 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


---
Mon site
Commenter la réponse de NHenry
0
Merci
Bonjour,
je n'ai pas compris, tu veux que je mette le sujet en résolu et que j'en poste un autre avec le projet complet ?
Commenter la réponse de Utilisateur anonyme
0
Merci
Bonjour,
j'ai réussi à résoudre mon problème, je n'écris plus les logs sur un fichier texte afin de les comparer mais je les compare directement à partir de la textbox.
Voici donc le code pour ceux qui seraient intéressé.
   
 Dim lstWords As New List(Of String)
 Sub VerifierMotInterdit()


        Dim filename As String = "C:\Users\Clément\Documents\ListeDeMots.txt"

        Using sr As New StreamReader(filename)
            While Not sr.EndOfStream

                Dim lineoftext As String = sr.ReadLine.Trim
                If Not lineoftext = "" Then
                    lstWords.Add(lineoftext)
                End If
            End While
        End Using

        Dim found As Boolean = False

        For Each s As String In lstWords
            If TextBox1.Text.ToLower.Contains(s.ToLower) Then
                'Action si le mot est trouvé

            End If
        Next
    End Sub
Commenter la réponse de Utilisateur anonyme
0
Merci
Salut,

On peut charger une List(Of plus simplement à partir d'un fichier :

lstWords.AddRange(IO.File.ReadAllLines("monfichier.txt"))

Et hop, 9 lignes de code envolées ;)
Commenter la réponse de Utilisateur anonyme
Messages postés
14501
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 juillet 2019
131
0
Merci
Ou en .NET 3.5+ :
IO.File.ReadAllLines("monfichier.txt").ToList

Commenter la réponse de NHenry
0
Merci
Salut NHenry,

Cela revient au même (AddRange ou ToList).
Reste à savoir laquelle des méthode est la moins coûteuse en ressources pour les grosses listes. Affaire a suivre...

Bonne soirée ;)
Commenter la réponse de Utilisateur anonyme
0
Merci
Merci à vous deux, j'ai changé mon code du coup ;)
Commenter la réponse de Utilisateur anonyme