StreamReader [Résolu]

Messages postés
37
Date d'inscription
jeudi 4 février 2016
Dernière intervention
1 décembre 2018
- - Dernière réponse : MaitreTeTe
Messages postés
37
Date d'inscription
jeudi 4 février 2016
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
Afficher la suite 

Votre réponse

4 réponses

Messages postés
1725
Date d'inscription
samedi 11 janvier 2014
Dernière intervention
11 décembre 2018
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
Messages postés
37
Date d'inscription
jeudi 4 février 2016
Dernière intervention
1 décembre 2018
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
Messages postés
12366
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 décembre 2018
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
Messages postés
37
Date d'inscription
jeudi 4 février 2016
Dernière intervention
1 décembre 2018
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
Messages postés
37
Date d'inscription
jeudi 4 février 2016
Dernière intervention
1 décembre 2018
-
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és
1725
Date d'inscription
samedi 11 janvier 2014
Dernière intervention
11 décembre 2018
> MaitreTeTe
Messages postés
37
Date d'inscription
jeudi 4 février 2016
Dernière intervention
1 décembre 2018
-
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és
12366
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 décembre 2018
> vb95
Messages postés
1725
Date d'inscription
samedi 11 janvier 2014
Dernière intervention
11 décembre 2018
-
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és
1725
Date d'inscription
samedi 11 janvier 2014
Dernière intervention
11 décembre 2018
> Whismeril
Messages postés
12366
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 décembre 2018
-
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
Messages postés
37
Date d'inscription
jeudi 4 février 2016
Dernière intervention
1 décembre 2018
-
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.