IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

StreamReader & StreamWriter - Close et Dispose


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de arnofly
    Homme Profil pro
    Développeur Web / Webdesigner
    Inscrit en
    Mai 2007
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web / Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 413
    Par défaut StreamReader & StreamWriter - Close et Dispose
    Bonjour,

    Je ne suis pas encore alaise avec StreamReader & StreamWriter et je viens de m'apercevoir qu'il faut tjrs les fermer apres chaque utilisation. J'ai une petite question toute bête concernant "Dispose".


    Admettons la procédure suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim SR As System.IO.StreamReader
     
    SR = "x"
    SR.Close
     
    SR = "y"
    SR.Close
    Est-ce utile de mettre un "SR.Dispose" après chaque utilisation ds la procédure (2 ds cet exmple) ou bien 1 seul suffit en fin de procédure ? Peut-être aussi qu'un seul "SR.Dispose" suffirait, placé à la fermeture d'une Form par exemple ?

    Merci de m'éclairer sur ce petit détail qui me turlupine

  2. #2
    Membre expérimenté Avatar de Faladin
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 333
    Par défaut
    Assurément, lorsque tu dispose de ton stream (writer ou reader) tu ne pourras pas l'utiliser ensuite, car tu laisses tomber les ressources utiliser pour cet objet. Donc faut pas le faire 2 fois.

    À savoir s'il faut le fermer après utilisation ou le fermer sur la fermeture de formulaire, je peux pas te dire ce qui est mieux par manque d'expérience, mais je serais tenté de le faire après la fin de l'utilisation, simplement pour ne pas l'oublier dans mon code.

    Mais bon, quelqu'un peut sûrement nous apporté plus de précision...

  3. #3
    Membre émérite Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Par défaut
    Salut

    Tu dois faire un close une fois le streamReader utilisé, sinon tu ne pourras pas lire un autre flux.

    Le Dispose dit au systeme que tu n'utiliseras plus cette variable, qu'il peut donc allouer l'espace mémoire à autre chose.

    Le Dispose se fait donc une seule fois et a la fin.

  4. #4
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Citation Envoyé par arnomedia Voir le message
    Admettons la procédure suivante :
    Est-ce utile de mettre un "SR.Dispose" après chaque utilisation ds la procédure (2 ds cet exmple) ou bien 1 seul suffit en fin de procédure ? Peut-être aussi qu'un seul "SR.Dispose" suffirait, placé à la fermeture d'une Form par exemple ?
    Il n'y a qu'un seul flux de fichier qui peut avoir des droits sur un fichier (droit en écriture). Les classes héritant de la classe Abstraite font appel à l'API de Windows, Windows va lui même se charger de verrouiller le fichier. La méthode Dispose sert à libérer les droits d'un fichier à d'autres programmes ainsi que les ressources natives utilisées par la classe.

    Le second appel de la méthode Dispose doit normalement déclencher une exception ObjectDisposedException. Pour pouvoir réutiliser cet objet il faut l'instancier à nouveau.

  5. #5
    Membre très actif Avatar de arnofly
    Homme Profil pro
    Développeur Web / Webdesigner
    Inscrit en
    Mai 2007
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web / Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 413
    Par défaut
    merci les gars !

    C'est nettement plus claire maintenant.

    Si j'ai bien compris, meme si j'utilise le fichier en lecture, je dois dabord faire un ".Close" avant de passer en écriture. Que la variable du StreamReader s'appelle "toto" et celle du StreamWriter "titi" on s'en fou, faut fermer d'adord ! C'est bien ça ?

  6. #6
    Membre expérimenté Avatar de Faladin
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 333
    Par défaut
    oui a cause de la gestion de windows comme Harz a dit

  7. #7
    Membre très actif Avatar de arnofly
    Homme Profil pro
    Développeur Web / Webdesigner
    Inscrit en
    Mai 2007
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web / Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 413
    Par défaut
    OK, et bien merci à tous.
    Du coup j'ai fais un peu de nettoyage ds mon code

    Bonne journée

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    et sur certaines classes, dispose appelle close
    (voir avec reflector)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/07/2009, 09h47
  2. Réponses: 6
    Dernier message: 01/10/2008, 11h08
  3. .close ou .dispose pour une form
    Par olibara dans le forum C#
    Réponses: 14
    Dernier message: 09/05/2008, 22h29
  4. [JDialog]Close() ou dispose() ?
    Par Invité dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 12/12/2005, 11h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo