none
Capture avant écriture dans un fichier ? RRS feed

  • Discussion générale

  • Bonjour,

    Est-il possible de capturer le flux de données qui va être écrit dans un fichier de type texte (avant écriture) ?

    En passant certainement par l'étape mémoire ?

    En vous remerciant d'avance


    Cordialement,

    • Type modifié TroxsaEditor mercredi 9 octobre 2013 14:54 pas de solution pour l'instant
    lundi 7 octobre 2013 12:02
    Auteur de réponse

Toutes les réponses

  • Bonjour Xavier,

    Dim flux As String = ""
    Dim i As Long = 0
    for i = 1 to nombre_datas
      flux = flux & DATAS
    Next i
    
    TextBox1.text = flux
    

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    lundi 7 octobre 2013 17:21
  • Bonjour,

    Non. Le mécanisme de cache d'écriture est géré en interne par Windows.

    Si vous utilisez .NET, il y a des caches qui sont mis en place dans le FileStream et StreamWriter. Est-ce que ce que vous souhaitez court-circuité les caches d'écriture de ces classes ?

    Sinon, pouvez-vous préciser votre demande en expliquant ce qui vous pose problème...

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    lundi 7 octobre 2013 18:17
    Modérateur
  • Bonjour,

    @Joseph, le problème est plus complexe que ça :)

    @Gilles : Non, je ne souhaite pas court-circuiter un le processus normal de la class FileStream, j'aimerais juste intercepté les flux d'écritures.

    Exemple : 

    J'ai un simple fichier batch qui va créer un accès au fichier avec la commande

    Echo toto >> C:\temp\fichiertoto.txt

    Il va donc ouvrir le fichier, ou créer le fichier s'il n'existe pas puis ajouté "toto", est-il possible de récupérer "toto" sans forcement passer par des opérations d'ouverture, lecture et fermeture du fichier ?

    Je pense que si je récupéré le message d’écriture (le flux) avant "écriture" réel je gagnerais en performance. et cela m’éviterais de faire des accès en ouverture, lecture et fermeture.

    Les fichiers peuvent être très gros et donc très lourd en traitement pour récupérer les dernières entrer ...



    Cordialement,

    lundi 7 octobre 2013 21:19
    Auteur de réponse
  • Bonjour,

    Est-ce que cet article correspondrai à vos besoins :

    http://gilles.tourreau.fr/dotnet_framework/dotnet-recuperer-la-sortie-d-un-processus.html

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    lundi 7 octobre 2013 23:33
    Modérateur
  • Bonjour Gilles,

    Cela ressemblerais a ce que je veux faire, mais dans l'exemple le processus CMD est exécuté par le programme (.net) lui même.

    Dans l'exemple que j'ai fait plus haut cela n'est pas un programme qui est exécuté par le .net cela peut être n'importe quel programme qui exécute une écriture dans le fichier.

    Exemple :
    Programme A : il va ecrire tout les X temps une ligne dans le fichier

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Timer1.Interval = TextBox1.Text * 1000
            If Timer1.Enabled = True Then
                Timer1.Enabled = False
                Button1.Text = "False"
            Else
                Timer1.Enabled = True
                Button1.Text = "True"
            End If
        End Sub

        Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
            Timer1.Interval = TextBox1.Text * 1000
            File.AppendAllLines("C:\temp\fichiertext.log", New String() {"ligne " & Now})
        End Sub

    Le Programme B : va capturé les lignes qui sont envoyé au fichier "fichierext.log"

    Le programme A et B ne font pas partis du même projet.


    Cordialement,

    mardi 8 octobre 2013 10:23
    Auteur de réponse
  • Bonjour,

    Dans ce cas, il est impossible de réaliser ce que vous voulez faire sans modifier le programme A... (Il faudrait que celui-ci écrivent dans un tube pour pouvoir communiquer avec votre application B).

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    mardi 8 octobre 2013 21:23
    Modérateur
  • Bonjour Gilles,

    Donc impossible de capturé le flux d'information que le fichier va recevoir ? c'est bien dommage !

    La seule solution est de passé par FileSystemWatcher afin de détecter les accès au fichier et de récupérer les ajouts de lignes.

    Merci Gilles


    Cordialement,

    mercredi 9 octobre 2013 07:51
    Auteur de réponse
  • Bonjour,

    La seule solution est de passé par FileSystemWatcher afin de détecter les accès au fichier et de récupérer les ajouts de lignes.
    Oui.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    mercredi 9 octobre 2013 18:25
    Modérateur