StreamReader [Résolu]

MaitreTeTe 33 Messages postés jeudi 4 février 2016Date d'inscription 18 octobre 2016 Dernière intervention - 13 oct. 2016 à 13:08 - Dernière réponse : MaitreTeTe 33 Messages postés jeudi 4 février 2016Date d'inscription 18 octobre 2016 Dernière intervention
- 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
Afficher la suite 

Votre réponse

10 réponses

vb95 1589 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 juin 2018 Dernière intervention - 13 oct. 2016 à 14:53
0
Merci
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

Commenter la réponse de vb95
MaitreTeTe 33 Messages postés jeudi 4 février 2016Date d'inscription 18 octobre 2016 Dernière intervention - 13 oct. 2016 à 16:28
0
Merci
Allo. Merci beaucoup pour la clarification!
Cependans vue que je fais cette opération x fois, je serais pas mieux utiliser step 1 ?
Commenter la réponse de MaitreTeTe
Whismeril 11624 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 juin 2018 Dernière intervention - 13 oct. 2016 à 18:07
0
Merci
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....
Commenter la réponse de Whismeril
MaitreTeTe 33 Messages postés jeudi 4 février 2016Date d'inscription 18 octobre 2016 Dernière intervention - Modifié par MaitreTeTe le 13/10/2016 à 18:43
0
Merci
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.
MaitreTeTe 33 Messages postés jeudi 4 février 2016Date d'inscription 18 octobre 2016 Dernière intervention - 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 1589 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 juin 2018 Dernière intervention > MaitreTeTe 33 Messages postés jeudi 4 février 2016Date d'inscription 18 octobre 2016 Dernière intervention - 14 oct. 2016 à 19:22
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 11624 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 juin 2018 Dernière intervention > vb95 1589 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 juin 2018 Dernière intervention - 14 oct. 2016 à 20:06
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 1589 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 juin 2018 Dernière intervention > Whismeril 11624 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 juin 2018 Dernière intervention - 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
MaitreTeTe 33 Messages postés jeudi 4 février 2016Date d'inscription 18 octobre 2016 Dernière intervention - 14 oct. 2016 à 23:13
Wow merci... c'est fou l'aide que vous donnez !!!!
Commenter la réponse de MaitreTeTe

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.