J'essaie de "envelopper" un Je veux deux choses: p> < ul>
Un morceau de mon code ressemble à ceci: p> au Si vous vous demandez pourquoi j'ai besoin d'ouvrir et de fermer streamreader code> dans une classe
Fichier code>, avec des méthodes et des attributs supplémentaires.
streamreader code> s'ouvre automatiquement dans le
Fichier Code> Classe; Li>
StreamReder code> s'ouvre lorsque nous utilisons la méthode excédentaire
readline code>, et non auparavant (nous devons modifier le fichier avant de le lire avec un
StreamReader Code >). li>
ul>
??? code>, je veux vérifier si le streamerader a été fermé. En effet, si nous faisons: p>
sr code> n'est pas null, mais comment vérifier qu'il est fermé et comment le réexprimer? p>
StreamReader code>, c'est parce que l'objet
fichier code> doit exister à tout moment, mais le fichier qu'il représente doit être modifié plusieurs fois dans un programme externe. P> P>
4 Réponses :
Il n'y a pas de moyen publié de vérifier si le flux / lecteur est fermé. Il suffit de définir ou conserver un drapeau séparé. p> p> lecteur code> à NULL dès que vous la fermez:
Je n'avais pas ce que même c'est simple. Merci.
La chose la plus facile est de éventuellement, vous pouvez rechercher Dispose code> (vous devez vraiment le faire, il ferme également le flux) et la définir sur
null code> lorsque vous le fermez. P >
endofstream code>, mais cela nécessite que vous lisez à la fin du flux. P>
Bonne idée; Je vous remercie. Pourquoi devrais-je préférer Disposer code> sur
Fermer code>? (selon ce sujet,
fermeture code> appels
Dispose code>: Stackoverflow.com/Questtions/7524903/... )
@Chostakovitch: Les opinions varient, mais mon opinion est la suivante: si elle implémente Idisposable code>, appelez
Dispose code>. C'est une preuve future aussi, car lorsque Microsoft le met à jour et qu'il nécessite une élimination, vous êtes en sécurité.
Il suffit de définir la référence à NULL lorsque vous fermez le lecteur:
sr.Close(); sr = null;
sorties: P> faux p>
vrai p>
Appuyez sur n'importe quelle touche pour continuer. . . P>
blockQuote> p> streamreader.close () code> fera un certain nombre de choses si le drapeau
céder code> est défini sur
false code>, si tel est le cas alors Vous pouvez vérifier si
streamreader.basestream code> est
null code>.
Idée intéressante. Je ne pense pas que ce comportement soit documenté, il serait donc préférable de ne pas compter sur elle. En effet, si on n'a aucun contrôle lorsque le lecteur est disposé, cela peut être une option. En outre, en utilisant StreamReader code> Propriété spécifique limitera les options pour utiliser d'autres lecteurs à la place (I.e. Base
Textreader code>).
Le fichier
system.io code> a une classe nommée
fichier code> alors faites attention à ne pas mélanger votre propre classe et le
System.IO.File code>
classe ..basestream.Canread code> Peut-être, bien que expirement disposé / null serait mieux.
Je suis français, alors ma classe est "Fichier". Je vais éditer cela, je voulais être complet mais j'ai fait le contraire.
Vous ne devriez pas concevoir un wrapper filtream qui peut fermer et rouvrir son flux. Gardez-le plus simple. Ceci est probablement un problème xy.