vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
FileSystemWatcher-Beispiel 
Autor: Manfred X
Datum: 28.09.15 06:31

Hallo!

Probier' mal diese Variante ....

Es wird ein Thread gestartet (CreateAndFill), der eine Datei exclusiv
zum Schreiben öffnet.
Es werden einige Text-Zeilen in einer Verzögerungs-Schleife eingetragen.
Der Zeitpunkt der Beendigung dieses Thread wird in einem Label (lblEnd)
angezeigt.

Der entprechend eingerichtete Filesystemwatcher (fsw) meldet im Created-Event
den Zeitpunkt des Erstellens dieser Datei (lblCreated) und im Changed-Event
das Schließen der Datei (lblChanged).
Zusätzlich wird der geschriebene Datei-Inhalt in der Routine gelesen, die
im Changed-Handler delegiert wird (Notify_Changed), und in eine Textbox
(txtFile) eingetragen.

Hinweis:
Die Überwachung des Filesystemwatchers arbeitet in einem Hintergrundthread,
deshalb ist im Rahmen der Ereignisverarbeitung ggf. Invoke erforderlich (vgl. Code).

Windows.Forms.Form:
Public Class frmFileSystemWatcherDemo
 
    Dim WithEvents fsw As New IO.FileSystemWatcher
 
    'Controls
    Dim lblcreated As New Label With _
        {.Parent = Me, .Width = 300}
 
    Dim lblchanged As New Label With _
        {.Parent = Me, .Top = 30, .Width = 300}
 
    Dim lblend As New Label With _
        {.Parent = Me, .Top = 60, .Width = 300}
 
 
    Dim txtFile As New TextBox With _
        {.Parent = Me, .Top = 100, .Width = 300, .Height = 150, _
         .Multiline = True}
 
 
    Delegate Sub changetypedel(ByVal ct As IO.WatcherChangeTypes)
    Dim Show_Text As New changetypedel(AddressOf Notify_changed)
 
 
    Dim filepath As String = "C:\daten\fsw.csv" 'zu überwachendes File
 
 
    Private Sub frmFileSystemWatcherDemo_Load(sender As System.Object, _
                          e As System.EventArgs) Handles MyBase.Load
 
        'Sicher stellen, daß die Datei nicht vorhanden ist
        IO.File.Delete(filepath)
 
        'Einrichten des Filesystemwatchers
        With fsw
            .BeginInit()
            .Filter = "*.csv"
            .NotifyFilter = _
                IO.NotifyFilters.FileName Or IO.NotifyFilters.Size
            .Path = IO.Path.GetDirectoryName(filepath)
            .EnableRaisingEvents = True
            .EndInit()
        End With
 
        Me.Show()
 
        'Thread zum Erstellen und Füllen der Datei 
        Dim t As New Threading.Thread _
           (New Threading.ThreadStart(AddressOf CreateAndFill))
 
        t.Start()
 
    End Sub
 
 
    '====================================================
    'FSW-Eventverarbeitung
    '==================================================== 
 
    Private Sub Notify_created()
        lblcreated.Text = "FSW erstellt: " & Now.ToString
    End Sub
 
    Private Sub fsw_Created(sender As Object, _
        e As System.IO.FileSystemEventArgs) Handles fsw.Created
        Me.Invoke(New MethodInvoker(AddressOf Notify_created))
    End Sub
 
 
    Private Sub Notify_changed(Changetype As IO.WatcherChangeTypes)
        lblchanged.Text = _
        "FSW geändert: " & Now.ToString & " " & Changetype.ToString
 
        'Dateiinhalt nach dem Changed-Event lesen
        txtFile.Text = IO.File.ReadAllText(filepath)
        Me.Refresh()
    End Sub
 
    Private Sub fsw_Changed(sender As Object, _
        e As System.IO.FileSystemEventArgs) Handles fsw.Changed
        Me.Invoke(Show_Text, {e.ChangeType})
    End Sub
 
 
    '===================================================
    'Thread zum Füllen der Datei
    '===================================================
 
 
    Private Sub Notify_ThreadEnd()
        'CreateAndFill-Thread wird beendet 
        lblend.Text = "Thread beendet: " & Now.ToString
    End Sub
 
 
    Private Sub CreateAndFill()
 
        'Filestream exclusiv öffnen
        Using fs As New IO.FileStream(filepath, IO.FileMode.CreateNew, _
                              IO.FileAccess.Write, IO.FileShare.None), _
              bw As New IO.BinaryWriter(fs)
 
              For i As Integer = 0 To 10
                 bw.Write("Zeile " & CStr(i) & ";" & Now.ToString & vbCrLf)
 
                 Threading.Thread.Sleep(1000) 'Verzögerung
              Next i
 
              'End Using schließt den Filestream / Dateifreigabe
        End Using
 
        'Zeitpunkt der Dateifreigabe anzeigen
        Me.Invoke(New MethodInvoker(AddressOf Notify_ThreadEnd))
    End Sub
 
End Class


Beitrag wurde zuletzt am 28.09.15 um 06:33:02 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
FileSystemWatcher.Created feuert zu früh.2.774Schudi23.09.15 16:38
Re: FileSystemWatcher.Created feuert zu früh.1.923Manfred X23.09.15 21:44
Re: FileSystemWatcher.Created feuert zu früh.1.912DotNetErbse26.09.15 07:37
Re: FileSystemWatcher.Created feuert zu früh.1.886Schudi27.09.15 10:22
FileSystemWatcher-Beispiel4.813Manfred X28.09.15 06:31
Re: FileSystemWatcher.Created feuert zu früh.1.924svss07.10.15 17:42
Re: FileSystemWatcher.Created feuert zu früh.1.987DotNetErbse08.10.15 11:55
Re: FileSystemWatcher.Created feuert zu früh.1.838JangoF08.10.15 13:00
Re: FileSystemWatcher.Created feuert zu früh.1.907svss09.10.15 10:46
Re: FileSystemWatcher.Created feuert zu früh.1.859DotNetErbse12.10.15 15:50
Re: FileSystemWatcher.Created feuert zu früh.1.871svss15.10.15 19:25
Re: FileSystemWatcher.Created feuert zu früh.1.737JangoF16.10.15 10:44
Re: FileSystemWatcher.Created feuert zu früh.1.790svss19.10.15 16:34

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel