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
A voir également:

4 réponses

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
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 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
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 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
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 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169 > 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 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656 > vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024
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 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169 > Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024
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
Rejoignez-nous