Comparaison de chaines de caractères [Résolu]

- - Dernière réponse :  Utilisateur anonyme - 4 août 2013 à 23:08
Bonjour à tous,
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.

    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


J'ai également essayé
Dim LectureMotInterdit As New StreamReader("C:\Users\Clément\Documents\ListeDeMots.txt")
        Dim ListeMot As String = LectureMotInterdit.ReadToEnd
        LectureMotInterdit.Close()
        Try

           If ListeMot.Contains(TextBox1.Text) Then
               TextBox1.Clear()
               ListeMot = String.Empty
               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

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


Mais l'application reste bloquée après le deuxième tick du timer. Pourtant ce code pour moi devrait marcher et c'est le plus logique !
J'espère que vous pourrez m'aider, voici le projet complet pour que vous puissiez voir ce qui ne fonctionne pas.
https://dl.dropboxusercontent.com/u/79764502/Ultimate.Parental.Control.2013.zip
Merci encore !
Afficher la suite 

5 réponses

Messages postés
14565
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 octobre 2019
136
0
Merci
Bonjour,

Essayes d'utiliser Io.File.ReadAllText, ça devrait passer.
0
Merci
Bonjour NHenry,
j'ai utilisé IO.File.ReadAllText (Pour mon code sans le Do, tu parlais pour le code avec le Do toi ?), et bonne nouvelle l'application ne se bloque plus.
Le problème c'est que la comparaison ne fonctionne pas, si un mot présent dans la textbox est également présent dans la liste de mot interdit, le programme ne le voit pas.
Vois-tu d'où ça peut venir ?
J'ai utilisé le code suivant :
 Sub VerifierMotInterdit()
        Dim ListeMot As String = IO.File.ReadAllText("C:\Users\Clément\Documents\ListeDeMots.txt")
        Dim MotLogs As String = TextBox1.Text
        Try

            If ListeMot.Contains(MotLogs) Then
                TextBox1.Clear()
                ListeMot = String.Empty
                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

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

Merci de ton aide !
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
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 ;)
0
Merci
Merci banana32 ;)