StreamWriter bloque l'écriture

Résolu
Utilisateur anonyme - 18 juil. 2013 à 18:30
 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:

10 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
18 juil. 2013 à 18:46
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
0
Utilisateur anonyme
19 juil. 2013 à 18:42
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.
0
Utilisateur anonyme
23 juil. 2013 à 19:14
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.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
23 juil. 2013 à 21:33
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
0

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

Posez votre question
Utilisateur anonyme
24 juil. 2013 à 17:06
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 ?
0
Utilisateur anonyme
3 août 2013 à 12:39
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
0
Utilisateur anonyme
3 août 2013 à 13:51
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 ;)
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
3 août 2013 à 14:01
Ou en .NET 3.5+ :
IO.File.ReadAllLines("monfichier.txt").ToList

0
Utilisateur anonyme
3 août 2013 à 14:40
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 ;)
0
Utilisateur anonyme
4 août 2013 à 23:08
Merci à vous deux, j'ai changé mon code du coup ;)
0
Rejoignez-nous