MaitreTeTe
Messages postés37Date d'inscriptionjeudi 4 février 2016StatutMembreDernière intervention 1 décembre 2018
-
13 oct. 2016 à 13:08
MaitreTeTe
Messages postés37Date d'inscriptionjeudi 4 février 2016StatutMembreDernière intervention 1 décembre 2018
-
14 oct. 2016 à 23:13
Bonjours.
Je me demmande pourquoi que lorsque j'ouvre un fichier txt dans StreamReader, meme si je fais le data.close() il reste toujours actif et donc de ce fait, il ne peu être supprimer?
Form Load:
Public Class LoginNew Private Sub LoginNew_Load(sender As Object, e As EventArgs) Handles MyBase.Load Down("FICHIER SOURCE DU WEB", Application.StartupPath & "\System\User\PoolList.nasd")
Dim Data As New IO.StreamReader(Application.StartupPath & "\System\User\PoolList.nasd") Dim Ligne As String Do Ligne = Data.ReadLine() PoolList.Items.Add(Ligne) Ligne = Data.ReadLine() Loop Until Ligne Is Nothing Data.Close()
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165 13 oct. 2016 à 14:53
Bonjour
Lorsque tu fais Data.Close() tu fermes le StreamReader ( un peu comme si tu fermes le robinet d'eau chaude du lavabo) mais le robinet existe toujours sur ton lavabo
Le StreamReader existant toujours et étant lié à ton fichier tu ne peux supprimer ce fichier
Pour cela insère
Data = Nothing
après le
Data.Close()
afin de supprimer le StreamReader Data
De plus ton code peut être optimisé
Dim Data As New IO.StreamReader(Application.StartupPath & "\System\User\PoolList.nasd") Dim Ligne As String Do Ligne = Data.ReadLine() PoolList.Items.Add(Ligne) Ligne = Data.ReadLine() Loop Until Ligne Is Nothing
Ainsi
Dim Data As New IO.StreamReader(Application.StartupPath & "\System\User\PoolList.nasd") Dim Lignes() As String = Data.ReadAllLines() For i = 0 to Lignes.count - 1 PoolList.Items.Add(Lignes(i)) Next
Re bonjours. Je ne voullais oas utiliser file puisque javais compris que cetait une bizzarrerie de microsoft de vb6 qui etait désuet. Jai ete relire et jetait dans lerreur, javais mal compris la chose !
Je vais utiliser file alors et laisser tomber streamreader !
Je vous dirrais aussi que toute les lignes de codes et les apprentissage de code, instruction, jai le cerveau un peu en conpotte lollllll
Merci encore.
Whismeril
Messages postés18624Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 septembre 2023629 13 oct. 2016 à 19:17
je ne te dis pas de le laisser tomber, si tu dois faire du réseau en flux continu, ou de la lecture de fichier binaire ce sera mieux.
Aussi certaines méthodes de serialisation xml passe par un stream, en fait plein de choses en ont besoin.
Mais dans le cas d'un fichier texte, sur ton pc, file le fait pour toi.
MaitreTeTe
Messages postés37Date d'inscriptionjeudi 4 février 2016StatutMembreDernière intervention 1 décembre 2018 14 oct. 2016 à 00:42
Voici le code que j'ai utiliser:
If System.IO.File.Exists(Application.StartupPath & "\System\User\PoolList.nasd") Then Ligne = 0 Dim lesLignes As String() = System.IO.File.ReadAllLines(Application.StartupPath & "\System\User\PoolList.nasd") For Ligne = 0 To lesLignes.Count() Step 2 PoolList.Items.Add(lesLignes(Ligne)) Next
Merci de votre aide encore
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165
>
MaitreTeTe
Messages postés37Date d'inscriptionjeudi 4 février 2016StatutMembreDernière intervention 1 décembre 2018 Modifié par vb95 le 14/10/2016 à 19:31
Bonsoir MaitreTete
C'est parfait mais plusieurs petites choses
Fait un
Imports System.IO
tout en haut de ta form à la première ligne . Cela évite de répéter
System.IO
dans le code ensuite
Dim Fich as String = Application.StartupPath & "\System\User\PoolList.nasd" If .File.Exists(Fich) Then Dim lesLignes As String() = .File.ReadAllLines(Fich) For Ligne = 0 To lesLignes.Count -1 Step 2 PoolList.Items.Add(lesLignes(Ligne)) Next End If
1) Ta Ligne
Ligne = 0
est inutile
2) La variable String Fich contient le nom de ton fichier : cela évite de l'écrire 2 fois
3) Pour ta boucle For
For Ligne = 0 to lesLignes.Count
. Là le
Step 2
de cette boucle te sauve d'une erreur "Index en dehors des limites"
Prends l'habitude de faire
For Ligne = 0 to lesLignes.Count - 1
4) Pas la peine de mettre des parenthèses à
lesLignes.Count
. Il n'y a aucun paramètre à y mettre ensuite
Il manquait un Step 2 à ma première réponse dans la boucle For
Bonne continuation
Whismeril
Messages postés18624Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 septembre 2023629
>
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023 Modifié par Whismeril le 14/10/2016 à 20:07
Salut VB, les parenthèses à Count sont de mon fait, comme elle sont obligatoires en C#, je ne pense pas à les enlever en VB.Net
Par contre, tes autres remarques, je lui ai déjà faites sur la discussion précédente.
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165
>
Whismeril
Messages postés18624Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 septembre 2023 14 oct. 2016 à 22:32
Salut Whis
Aucun souci ne t'inquiètes pas ! De toute façon ce n'était pas une erreur mais une simple remarque pour les parenthèses !
Bon weekend à toi