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 :

reaccéder à un fichier dans un timer


Sujet :

VB.NET

  1. #1
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 24
    Par défaut reaccéder à un fichier dans un timer
    Bonjour,

    J'ai un timer qui crée un fichier et qui y accède toutes les 500ms pour y insérer des lignes
    je veux que ce timer même si le fichier a été fermé puisse refaire un nouveau fichier :

    j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Timer_depil_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer_depil.Tick
     
    Static Dim SW As New StreamWriter(NOM_FICHIER)
    ça marche pas mal mais si je fait un close du fichier, il ne me le recrée pas
    (j'ai une exception)
    j'arrive pas à redéfinir le streamwriter

    merci pour votre aide

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Enlève le Static : quand tu déclares une variable locale avec Static, ça fait qu'elle n'est initialisée que la première fois et qu'elle garde ensuite sa valeur. Comme on ne peut pas réouvrir un StreamWriter qui est fermé, il faut forcément le recréer.

    Et utilise un bloc Using pour être sûr que le ficher soit bien refermé à chaque fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Timer_depil_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer_depil.Tick
     
        Using SW As New StreamWriter(NOM_FICHIER)
            ...
        End Using
     
    End Sub

  3. #3
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Et aussi dans l'event du timer : Timer_depil.Enabled=false au début et Timer_depil.Enabled=true à la fin.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Et aussi dans l'event du timer : Timer_depil.Enabled=false au début et Timer_depil.Enabled=true à la fin.
    Pas formément... a priori c'est un timer Windows Forms, donc il peut pas exécuter plusieurs Ticks à la fois, vu que le Tick s'exécute toujours sur le thread de l'UI. Mais avec un autre type de timer, non lié à l'UI, il faudrait effectivement prendre ce genre de précautions...

  5. #5
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 24
    Par défaut
    Bonjour,

    J'ai essayé, je n'ai plus d'exception, mais par contre j'ai un fichier qui fait 0ko à la fin.
    Je veux garder la référence au fichier quand je reviens dans l' évènement timer et en faire un nouveau si NOM_FICHIER (global) a changé


    voilà le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Private Sub Timer_depil_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer_depil.Tick
            Static init As Boolean
     
            'Static Dim SW As New StreamWriter(NOM_FICHIER)
            Using SW As New StreamWriter(NOM_FICHIER)
    Merci pour tout

  6. #6
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 24
    Par défaut
    j'ai trouvé mais je vais mangé d'abord !

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par tbar403 Voir le message
    J'ai essayé, je n'ai plus d'exception, mais par contre j'ai un fichier qui fait 0ko à la fin.
    Il faut que tu ouvres le fichier en mode "append" (ajouter à la fin du fichier) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Using SW As New StreamWriter(NOM_FICHIER, True)
    Soit dit en passant, ta méthode est beaucoup trop longue, tu devrais essayer de la refactoriser en plusieurs méthodes plus petites...

  8. #8
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 24
    Par défaut
    J'ai fait ça:
    dans les déclaration de la classe form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public file As System.IO.StreamWriter

    ensuite j'ai créé une sub (qui est appelée dès qu'il y a un nouveau fichier à créer) où j'ai mis le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file = My.Computer.FileSystem.OpenTextFileWriter(NOM_FICHIER, True)
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Timer_depil.Enabled = True
    dans le timer , j'accède à 'file' par les méthodes file.WriteLine

    dans le timer, s'il n'y a plus rien à faire dans le fichier, je fais:
    c'est vrai que le code est à refactoriser, tu as raison mais j'avais un autre souci !
    En tout cas merci beaucoup pour l'aide et bonne journée

  9. #9
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Pas formément... a priori c'est un timer Windows Forms, donc il peut pas exécuter plusieurs Ticks à la fois,
    C'est exact, mais si on a un intervalle de timer petit par rapport au temps d'éxécution de l'event, on va empiler des event timer et passer tout son temps à gérer ces events en bloquant plus ou moins les events de l'IHM.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/12/2003, 11h12
  2. Réponses: 4
    Dernier message: 10/10/2003, 18h04
  3. [] [Réseau] Renommer des fichiers dans un site FTP
    Par JerBi dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 22/08/2003, 00h35
  4. [LG]Ecrire le contenu d'un fichier dans un autre
    Par lucke dans le forum Langage
    Réponses: 10
    Dernier message: 26/04/2003, 20h48
  5. Réponses: 4
    Dernier message: 24/04/2003, 22h28

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