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 :

Femeture fichier texte sur fin application


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    jcd
    jcd est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 29
    Par défaut Femeture fichier texte sur fin application
    Bonjour,

    Quand je développes mes applications, je souhaite dispose d'un fichier de debug "perso", qui me permet de tracer mes requêtes SQL, certains points de passages, valeurs de variables...

    Je génère donc pour cela un fichier texte que je nomme en ".xls", avec des tabulations en Chr(9), ce qui donne le change à Excel et permet d'avoir un pseudo classeur Excel "colonné".

    J'ai créé une classe pour ces traitements. A l'ouverture du formulaire principal de l'application, j'appelle un module VB principal qui crée une instance publique de la classe et me permet donc de stocker des traces.

    Mon problème est lors de la "sortie" de l'application :
    Quel que soit la porte de sortie (Menu Fichier/Quitter, fermeture par la croix sur la fenêtre...), il faut absolument que j'arrive à passer à tous les coups par un "Close" de mon fichier texte de trace (je ne souhaite bien sur pas le fermer à chaque écriture...).

    Et là, j'ai des problèmes... ;-(

    J'ai beau mettre un close dans le finalize de ma classe, cela ne suffit pas, le fichier n'est pas écrit sur le disque "à tous les coups"...

    Toute suggestion est la bienvenue ;-)

    D'avance, merci
    JCD

  2. #2
    jcd
    jcd est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 29
    Par défaut
    Pour info, les écritures se font par un StreamWriter.
    Mais le problème n'est pas là, en fonctionnement "normal" (sortie par Fichier/Quitter...), ma classe fonctionne correctement. C'est donc plus un problème d'intégration dans l'application que le codage lui même.

    JCD

  3. #3
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Pourquoi passer par un système comme le tien alors qu'il y a tout ce qu'il faut dans le framework pour tracer une application ?
    Utilise l'objet Trace par exemple. Tu peux y ajouter autant de listeners que tu veux.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  4. #4
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par jcd Voir le message
    J'ai beau mettre un close dans le finalize de ma classe, cela ne suffit pas, le fichier n'est pas écrit sur le disque "à tous les coups"...
    Tu as pensé à appeller Flush sur le FileStream sous-jacent avant Close ?

  5. #5
    jcd
    jcd est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 29
    Par défaut
    Merci pour vos premières réponses.

    Pourquoi passer par un système comme le tien alors qu'il y a tout ce qu'il faut dans le framework pour tracer une application ?
    Utilise l'objet Trace par exemple. Tu peux y ajouter autant de listeners que tu veux.
    1) J'utilisais un système similaire en VB précédemment qui me donnait entière satisfaction
    2) Je veux que les traces soient utilisables une fois l'application déployée, et il me semble que Trace est l'équivalent d'un Debug.print dans la fenêtre exécution, alors que je souhaite un fichier utilisable après déploiement.

    Tu as pensé à appeller Flush sur le FileStream sous-jacent avant Close ?
    J'ai essayé également, mais rien n'y fait.

    Voici en résumé la structure de test :
    • Un formulaire avec un menu "Quitter"
    • Un module Principal lancé au démarrage de l'appli
    • Une classe de "Trace"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Public Class Form1
     
        Private Sub QuitterToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles QuitterToolStripMenuItem.Click
            oTrace = Nothing
            Me.Close()
        End Sub
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Main()
        End Sub
     
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Module Principal
     
        Public oTrace As New Trace() 'Objet Debug (écriture dans fichier)
     
        '----------------------------
        'Démarrage de l'application
        '----------------------------
        Sub Main()
            oTrace.WriteLine("Toto")
        End Sub
     
    End Module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    Imports System.IO
     
    Public Class Trace
     
        Private fileWriter As StreamWriter
     
        Private MyFicDBGValue As String
     
        Public ReadOnly Property FicDBG() As String
            Get
                Return MyFicDBGValue
            End Get
        End Property
     
        '---------------------------------------------
        'Constructeur (ouverture du fichier où écrire)
        '---------------------------------------------
        'Ouvre le fichier en "Append" 
        Sub New(Optional ByVal FicDBGValue As String = "DBGAppli.xls")
     
            Me.MyFicDBGValue = FicDBGValue
            Try
                fileWriter = New StreamWriter(My.Application.Info.DirectoryPath & "\" & FicDBG, True)
            Catch ex As Exception
                System.Windows.Forms.MessageBox.Show("New Création de fichier DBG : " & ex.Message)
                Try
                    fileWriter.WriteLine(Now & Chr(9) & "Lancement de l'application '" & My.Application.Info.Title & "'")
                Catch ex1 As Exception
                    System.Windows.Forms.MessageBox.Show("New Ecriture dans fichier DBG : " & ex.Message)
                End Try
            End Try
        End Sub
     
     
        '-----------------------------------------------------
        'Ecriture dans le fichier de Debug des infos passées
        '-----------------------------------------------------
        Public Sub WriteLine(ByVal ParamArray MesStr() As String)
            Dim MyStr As String 'Contruction de la chaine à écrire dans le fichier
            Dim i As Integer 'Variable brouillon
     
            If UBound(MesStr) < 0 Then  Exit Sub
     
            'Initialisation avec Date/Heure
            MyStr = Now & Chr(9) & MesStr(0)
            If UBound(MesStr) > 0 Then
                For i = 1 To UBound(MesStr)
                    MyStr = MyStr & Chr(9) & MesStr(i)
                Next i
            End If
            Debug.Print("Mystr=" & MyStr)
            If Not IsNothing(fileWriter) Then
                Try
                    fileWriter.WriteLine(MyStr)
                Catch ex As Exception
                    System.Windows.Forms.MessageBox.Show("Trace WriteLine : " & ex.Message)
                End Try
            End If
        End Sub
     
     
        Protected Overrides Sub Finalize()
     
            If Not IsNothing(fileWriter) Then
                Try
                    fileWriter.WriteLine(Now & Chr(9) & "Arret Tracepar Finalize")
                    fileWriter.WriteLine(vbNewLine)
                    fileWriter.Flush()
                    fileWriter.Close()
                    fileWriter = Nothing
                Catch ex As Exception
                    System.Windows.Forms.MessageBox.Show("Finalize : " & ex.Message)
                End Try
            End If
     
            MyBase.Finalize()
        End Sub
    End Class
    Encore merci,
    JCD

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/09/2006, 09h04
  2. Réponses: 32
    Dernier message: 17/05/2006, 16h03
  3. Réponses: 6
    Dernier message: 23/02/2006, 12h09
  4. Réponses: 29
    Dernier message: 28/07/2005, 13h41
  5. Envoyer un fichier texte sur un port IP ?
    Par jnc dans le forum Web & réseau
    Réponses: 4
    Dernier message: 19/07/2005, 11h01

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