VB/VB.Net Question lecture d'un fichier text dans une ListBox

A

Anonymous

Invité
#1
Salut,

Voila je suis un peu vos tutos mais y a un truc que je saisie pas, j'ai besoin qu'on m'éclaire.
Donc j'ai fais une form pour enregistrer des données sous forme de text avec une extension bidon (.WTF), j'ai mit le nom de compte comme nom de fichier et j'ai indiquer d'écrire le MDP dans le fichier du nom de compte.
Maintenant j'ai un soucis, dés que je recréer un compte avec le même nom de compte le mot de passe s'écrie à la suite de l'ancien.

Ensuite j'aimerais pouvoir récupérer c'est donné dans une ListBox, je m'explique.
J'aimerais que dans la list box je vois le nom de fichier donc comme exemple je créer un compte "Cadernis" mdp: cad123
J'ai un fichier qui se créer du nom de Cadernis.wtf et a l'intérieur j'ai "cad123". J'aimerais voir dans ma liste le nom de compte donc "Cadernis".

Dans une autre form j'aurais une List box avec les memes données sauf que l'action que j'effectuerais sera la suppression du fichier cadernis.wtf et il faudrait que je fasse en sorte que si je supprimer un fichier il se supprime aussi de la listbox.

Par la suite j'aimerais utiliser le nom de compte comme identifiant et le texte écris à l’intérieur comme mot de passe pour effectuer une connexion au serveur D2.

Voila j’espère que j'ai été assez clair c'est un peu fouillis et j’espère que vous pourrez m'aider.
Merci beaucoup
 
A

Anonymous

Invité
#2
Pourquoi ne pas avoir un fichier nommé Account.wtf dans le quelle tu écris sous cette forme :

NomDeCompte|MotdePass

Il te suffit ensuite de bien manier le streamreader ainsi que les split et le tour est joué
 
A

Anonymous

Invité
#3
J'étais en train d'y réfléchir effectivement, aprés j'envoie les données ligne par ligne dans une liste box mais faut que j'informe qu'il y a un "|" entre chaque donnée.

Je suis en train de me compliqué la vie je pense mais je veux faire ceci:

-Un fichier account.wtf avec nomdecompte | motdepasse
-Ensuite Lecture ligne par ligne avec deux informations séparé par un "|"
-Ensuite lorsque je vais séléctionné dans ma listbox le compte et que je vais le charger ceci ouvrira la fenetre du bot:
-(La c'est la partie ou je pense que je complique les choses) je récupère la 1ere partie (cad nomdecompte) que je met dans une Textbox
je fais la meme chose pour le mot de passe dans une deuxieme textbox pour que se sois plus propre je n'affiche pas les textbox et lorsque je lancerais la connexion le bot se connectera avec les données des 2 textbox invisble de la form du bot.

Voila je sais pas si t'arrive a comprendre ^^'

Edit: La j'ai écris la commande pour créer un dossier "Account", mais j'arrive pas a faire enregistrer le fichier texte dans le dossier account.
Sinon je me suis débrouillé pour que les infos dans le fichier texte sois sous cette forme nomdecompte|motdepasse.
Maintenant y a plus qu'a gérer le split.
 
A

Anonymous

Invité
#5
Je t'aide vers 18:30, j'ai fait sa pour mon bot.
 
A

Anonymous

Invité
#8
J'ai réussi a me libérer, voilà mon code je te laisse l'étudier:
Imports System.IO

Public Class Form4
Private mData() As String
Private mFileName As String
Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Reader As New StreamReader(Application.StartupPath & "\Data\Accounts.sun")
Dim AccountText As String = Reader.ReadToEnd
Reader.Close()
Dim AccountData() As String = AccountText.Split(New Char() {"|"})

mData = AccountText.Split("|")


For i As Integer = 1 To AccountData.Length - 1
AccountsList.Items.Add(AccountData(i))
Next
End Sub

Private Sub KryptonButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KryptonButton1.Click
Dim FileName As String
FileName = AccountsList.SelectedItem.ToString
Dim monReader As New IO.StreamReader(FileName & ".sun")
Dim formbot As New Form1
formbot.MdiParent = form2
formbot.Show() 'ouverture de la form
NewInAppWindow.NdC.Text = FileName
NewInAppWindow.MdP.Text = mData(2)
NewInAppWindow.Text = FileName
Me.Close()
End Sub

Private Sub AccountsList_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AccountsList.SelectedIndexChanged
Try

Dim Reader As New StreamReader(Application.StartupPath & "\" & AccountsList.SelectedItem.ToString & ".sun")
mFileName = AccountsList.SelectedItem.ToString & ".sun"
Dim AccountText As String = Reader.ReadToEnd()
Reader.Close()

mData = AccountText.Split("|")


Catch ex As Exception
End Try
End Sub
End Class
mdata(1) = nom de compte
mdata(2) = mot de passe

En espérant t'avoir aidé ;)
 
A

Anonymous

Invité
#9
Pourquoi dire "mon" code alors qu'il ne viens absolument pas de toi? Ce code viens d'un ancien projet ("SunBot") et cette partie était d'un prénommé "M0g" ou "Mah" je sais plus trop
Tout ça pour dire que c'est pas vraiment sympas de s’approprier le travail des autres :/

Edit : Le code original avec les commentaires (qui t'aiderons peut etre a mieux comprendre)

Code:
    Private Sub KryptonButton1_Click(sender As System.Object, e As System.EventArgs) Handles KryptonButton1.Click
        Dim name_file As String ' déclaration de la variable pour stocker le nom du fichier a créer...
        name_file = textbox_name_file.Text


        Dim monwriter As New IO.StreamWriter(name_file & ".sun", True) ' Déclaration du code permettant d'écrire dans le fichier, puis création du fichier en [votre nom de fichier].txt
        monwriter.Write("|" & textbox_name_file.Text & "|" & TextBox_write.Text & "|" & TextBox3.Text) ' écriture de toutes les données que l'utilisateur à enter [M0g]
        monwriter.Close()
        Dim sr As New IO.StreamReader(Application.StartupPath & "\Data\Accounts.sun") ' On déclare la fonction pour lire dans un fichier et on indique à la fonction la chemin [M0g]
        Dim getsr As String = sr.ReadToEnd() ' On lit le fichier [M0g]
        sr.Close() ' On ferme le fichier pour ne pas avoir d'erreur d'accés [M0g]
        Dim sw As IO.StreamWriter ' On déclare la fonction pour écrire dans un fichier [M0g]
        sw = New IO.StreamWriter(Application.StartupPath & "\Data\Accounts.sun") ' On indique à la fonction le chemin [M0g]
        If getsr = "" Then sw.Write("|" & name_file) Else sw.Write(getsr & "|" & name_file) ' On écrit dans le fichier [M0g]
        sw.Close() ' On ferme le fichier pour ne pas avoir d'erreur d'accés [M0g]
        Dim message As String = ""

        message = "Le compte a bien été créé" & vbCrLf & _
            "Le Nom du compte est " & name_file 'Message d'information qui apparait une fois le fichier créé

        MsgBox(message, MsgBoxStyle.Information, "Compte enregistré avec succès") 'Message qui prévien l'utilisateur que le compté à bien été enregistré

        Me.Close() 'Fermeture de la fenêtre d'enregistrement de compte
    End Sub
 
A

Anonymous

Invité
#10
Pas mal mon soucis c'est que j'ai pas reussie a créer mon fichier text dans le dossier account, j'ai rentré les lignes pour créer un fichier account si il n'existe pas déja mais ensuite quel est la commande pour dire enregistre le fichier .sun (dans ton exemple) dans le dossier account.

Voila mon petit soucis pour continuer, merci de ton aide.

EDIT: je viens de faire une traduction mais étant débutant j'aurais besoin de votre aide pour me dire si j'ai bon ou faut.
Ca m'aiderais enormement, merci

Code:
Imports System.IO

Public Class Form4
    Private mData() As String
    Private mFileName As String
    Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Form ou tu charge les comptes
        Dim Reader As New StreamReader(Application.StartupPath & "\Data\Accounts.sun") 'Crée une variable "reader" en tant que nouveau Lecteur de fichier dans le fichier du .exe et aussi dans le fichier Data/Accounts.cun
        Dim AccountText As String = Reader.ReadToEnd ' crée une variable "accounttext" en tant que la variable "reader" et li lavariable reader jusqua la fin
        Reader.Close() 'on ferme la variable reader
        Dim AccountData() As String = AccountText.Split(New Char() {"|"}) 'crée une variable accountdata qui correspond a la variable accounttext ou on ajoute un nouveau caractere "|" mais la je comprend pas trop

        mData = AccountText.Split("|") ' la je comprend que mData correspond a la lecture du fichier sans "|"


        For i As Integer = 1 To AccountData.Length - 1 'ici je comprend pas trop pour "i" en tant que nombre =1 jusqu'a que la longueur de la variable accountdata -1 (je comprend pas trop non plus)
            AccountsList.Items.Add(AccountData(i)) 'ajout a la liste l'objet accountdata pour "i"
        Next
    End Sub

    Private Sub KryptonButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KryptonButton1.Click
        Dim FileName As String 'crée la variable FileName
        FileName = AccountsList.SelectedItem.ToString 'La variable filename correspond a l'objet selectioné dans la liste (accountlist)
        Dim monReader As New IO.StreamReader(FileName & ".sun") ' ici je saisi pas trop non plus tu crée une variable qui li la variable filename et l'extension .sun
        Dim formbot As New Form1
        formbot.MdiParent = form2 'la form s"ouvre dans la fenetre parent
        formbot.Show() 'ouverture de la form
        NewInAppWindow.NdC.Text = FileName ' donc la c'est ou se place dans ta form principal le nom de compte et le mot de passe recuperer au-dessu
        NewInAppWindow.MdP.Text = mData(2)
        NewInAppWindow.Text = FileName 'le nom que prend la fenetre du bot aprés ouverture
        Me.Close() 'et la la fenetre se ferme...
    End Sub

    Private Sub AccountsList_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AccountsList.SelectedIndexChanged
        Try

            Dim Reader As New StreamReader(Application.StartupPath & "\" & AccountsList.SelectedItem.ToString & ".sun") 'je comprend pas cette ligne pourquoi on a de nouveau Reader comme nom de variable et pourquoi il repart lire les fichiers dans / et pourquoi mettre AccountsList.SelectedItem.ToString alors que juste au dessus on a defini cette valeur pour "FileName
            mFileName = AccountsList.SelectedItem.ToString & ".sun"
            Dim AccountText As String = Reader.ReadToEnd()
            Reader.Close()

            mData = AccountText.Split("|")


        Catch ex As Exception
        End Try
    End Sub
End Class
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#11
bonjour , oublis le code de lolodu92 (ou de je ne sais pas qui ... recopié sans en comprendre une seule ligne , mais qui dit que ca vien de lui , ca me rapelle quelqu'un qui avait fait une connexion tout seul mais dont le log m'etait tres tres famillié a la virgule pres)
c'est fait n'importe comment 2 split a la suite qui font exactement la meme chose et j'en passe des meilleurs
pas etonnant que tu le comprennes pas , lui aussi doit pas le comprendre
jafro a dit:
J'étais en train d'y réfléchir effectivement, aprés j'envoie les données ligne par ligne dans une liste box mais faut que j'informe qu'il y a un "|" entre chaque donnée.

Je suis en train de me compliqué la vie je pense mais je veux faire ceci:

-Un fichier account.wtf avec nomdecompte | motdepasse
-Ensuite Lecture ligne par ligne avec deux informations séparé par un "|"
-Ensuite lorsque je vais séléctionné dans ma listbox le compte et que je vais le charger ceci ouvrira la fenetre du bot:
-(La c'est la partie ou je pense que je complique les choses) je récupère la 1ere partie (cad nomdecompte) que je met dans une Textbox
je fais la meme chose pour le mot de passe dans une deuxieme textbox pour que se sois plus propre je n'affiche pas les textbox et lorsque je lancerais la connexion le bot se connectera avec les données des 2 textbox invisble de la form du bot.

Voila je sais pas si t'arrive a comprendre ^^'

Edit: La j'ai écris la commande pour créer un dossier "Account", mais j'arrive pas a faire enregistrer le fichier texte dans le dossier account.
Sinon je me suis débrouillé pour que les infos dans le fichier texte sois sous cette forme nomdecompte|motdepasse.
Maintenant y a plus qu'a gérer le split.
dans ce cas la ne mets pas du tout de textbox , 2 variables string suffiront

pour lire un fichier txt :
Code:
Dim MonfluxLecture As Stream
            MonfluxLecture = File.OpenRead(file_) ' file_ c'est le chemin et le nom du fichier a lire ex : "c:\dossiers_des_comptes\mescomptes.txt"
            Dim MaLigneLire As StreamReader = New StreamReader(MonfluxLecture, System.Text.Encoding.ASCII)
            While MaLigneLire.Peek() > -1 ' -1 est renvoyé si la fin du fichier est atteinte
                Dim ligne = MaLigneLire.ReadLine()
                dim compte = ligne.Substring(0,ligne.IndexOf("|") - 1)
                dim pass =  ligne.Substring(ligne.IndexOf("|") + 1)
            End While
            MaLigneLire.Close()
pour ecrire dans un fichier txt :
Code:
'   ecriture du flux
            Dim MonfluxEcriture As Stream
            MonfluxEcriture = File.OpenWrite(file_)
            '   ecriture ligne à ligne
            Dim MaLigneEcrire As StreamWriter = New StreamWriter(MonfluxEcriture, System.Text.Encoding.ASCII)
            MaLigneEcrire.WriteLine(compte & "|" & pass)
            MaLigneEcrire.Close()
 
A

Anonymous

Invité
#12
Je me suis mal exprime, je voulais dire le code de mon projet enfin bref...
 
A

Anonymous

Invité
#13
Salut Toons,

Donc pour le premier code j'ai tout saisi, pour le second pas tout saisi en gros je vais te metre mon code actuelle de ma form d'enregistrement de données.

Code:
 If System.IO.Directory.Exists("Account") = False Then
            System.IO.Directory.CreateDirectory("Account") 'crée le Dossier Account
        End If

        Dim name_file As String
        name_file = TextBox1.Text 'nom du fichier = nom de compte

        Dim monwriter As New IO.StreamWriter(name_file & ".wtf", True)
        monwriter.Write(TextBox1.Text & "|" & TextBox2.Text & "|" & TextBox3.Text & "|" & ListBox2.Text) 'nom de compte | mot de passe | Mot de passe Chef | Serveur
        monwriter.Close()

Mais me manque la commande pour enregistrer le fichier name_file.wtf dans le dossier "/Account"
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#14
Application.StartupPath & "\Account\" & name_file & ".wtf"
 
A

Anonymous

Invité
#16
J'ai un soucis, donc premier probleme c'est que mon flux d'ecriture ecris mais pas ligne par ligne il supprime le texte de la premiere ligne et remplace les caracteres.

Mon second probleme c'est que mon flux de lecture n'affiche pas les infos dans la listebox et je trouve pas a commande pour afficher le flux de lecture ligne par ligne dans la listbox.

Merci de ton aide
 

4R7Y

Contributeur
Inscrit
6 Mars 2011
Messages
213
Reactions
0
#17
Salut, pour commencer donne des noms explicites à tes contrôles et variables. Ça peut te sembler chiant à faire mais c'est vraiment important pour avoir un code propre et le comprendre plus facilement à la relecture
 
A

Anonymous

Invité
#18
4R7Y a dit:
Salut, pour commencer donne des noms explicites à tes contrôles et variables. Ça peut te sembler chiant à faire mais c'est vraiment important pour avoir un code propre et le comprendre plus facilement à la relecture
Je le fais, justement ^^ je suis en apprentissage donc il me semblait logique de mettre un nom logique a mes contrôles et mes variables.
Mais la je cherche un gros fichier ou je pourrais trouver tout les fonction, variables et autre commande utile avec leurs descriptions et leurs utilités.
Car la je navigue de site en site, de forum en forum et sur certain forum y a des gens qui mélange les codes de différentes langues donc ça aide pas. Heureusement que j'ai découvert Cadernis ! ^^

PS: Sinon comment je fais pour écrire ligne par ligne mon flux et afficher mon flux de lecture dans ma listbox.
Je vous montres mon code.

Flux d'écriture
Code:
    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        If System.IO.Directory.Exists("Account") = False Then
            System.IO.Directory.CreateDirectory("Account") 'crée le Dossier Account
            If System.IO.File.Exists("\Account\AccountList.txt") = False Then
                System.IO.File.Create(Application.StartupPath & "\Account\" & "AccountList.txt", True)

            End If
        End If
        Dim Fluxinfocompte As Stream
        Fluxinfocompte = File.OpenWrite(Application.StartupPath & "\Account\AccountList.txt")
        Dim LigneInfo As StreamWriter = New StreamWriter(Fluxinfocompte, System.Text.Encoding.ASCII)
        LigneInfo.WriteLine(TextBox1.Text & "|" & TextBox2.Text & "|" & TextBox3.Text & "|" & ListBox2.Text)
        LigneInfo.Close()

Flux de lecture
Code:
    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        Dim FluxAccount As Stream
        FluxAccount = File.OpenRead("\Account\AccountList.txt")
        Dim FluxLecture As StreamReader = New StreamReader(FluxAccount, System.Text.Encoding.ASCII)
        While FluxLecture.Peek > -1
            Dim ligne = FluxLecture.ReadLine
            Dim Compte = ligne.Substring(0, ligne.IndexOf("|") - 1)
            Dim Pword = ligne.Substring(ligne.IndexOf("|") + 1)
            Dim Server = ligne.Substring(ligne.IndexOf("|") + 3)

        End While
        FluxLecture.Close()
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#19
pour afficher dans la listbox : listbox1.add(compte) apres la la igne dim compte
 
A

Anonymous

Invité
#20
ToOnS a dit:
pour afficher dans la listbox : listbox1.add(compte) apres la la igne dim compte
Je suis vraiment idiot... j'ai tout essayer sauf çà...
merci
 
Haut Bas