StreamReader

Résolu
MaitreTeTe
Messages postés
37
Date d'inscription
jeudi 4 février 2016
Statut
Membre
Dernière intervention
1 décembre 2018
- 13 oct. 2016 à 13:08
MaitreTeTe
Messages postés
37
Date d'inscription
jeudi 4 février 2016
Statut
Membre
Derniè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()

Usertype = 1
End Sub


Le bouton
System.IO.File.Delete(Application.StartupPath & "\System\User\PoolList.nasd")


J'utilise VisualStudio 2015 en VB.Net

4 réponses

vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
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

0
MaitreTeTe
Messages postés
37
Date d'inscription
jeudi 4 février 2016
Statut
Membre
Dernière intervention
1 décembre 2018

13 oct. 2016 à 16:28
Allo. Merci beaucoup pour la clarification!
Cependans vue que je fais cette opération x fois, je serais pas mieux utiliser step 1 ?
0
Whismeril
Messages postés
17336
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
20 mai 2022
596
13 oct. 2016 à 18:07
Bonsoir,

pas plus tard qu'hier, je t'ai dit que pour un fichier texte sur ton ordi, la classe File est plus simple que le stream.

Tu me dis , oui super, et aujourd'hui tu fais l'inverse....

Et bien, c'est un problème que tu n'aurais pas eu avec File car elle gère le stream et le libère proprement dès que la lecture est finie....
0
MaitreTeTe
Messages postés
37
Date d'inscription
jeudi 4 février 2016
Statut
Membre
Dernière intervention
1 décembre 2018

Modifié par MaitreTeTe le 13/10/2016 à 18:43
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.
0
Whismeril
Messages postés
17336
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
20 mai 2022
596
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.
0
MaitreTeTe
Messages postés
37
Date d'inscription
jeudi 4 février 2016
Statut
Membre
Derniè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
0
vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151 > MaitreTeTe
Messages postés
37
Date d'inscription
jeudi 4 février 2016
Statut
Membre
Derniè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
0
Whismeril
Messages postés
17336
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
20 mai 2022
596 > vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022

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.
0
vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151 > Whismeril
Messages postés
17336
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
20 mai 2022

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
0