vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik:    |   VB-Versionen: VB.NET02.05.06
Verzeichnis-Überwachung in VB.NET

Mit der FileSystemWatcher-Klasse lässt sich ein Verzeichnis sehr einfach überwachen und entsprechende Änderungen an Dateien und Ordner in Erfahrung bringen.

Autor:  Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  2.317 
http://www.tools4vb.de/System:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt 

Mit unserem heutigen Tipp zeigen wir Ihnen, wie sich Änderungen in einem bestimmten Verzeichnis komfortabel überwachen lassen. Hierzu verwenden wir die FileSystemWatcher-Klasse, die uns über sämtliche Änderungen über die jeweiligen Ereignisse benachrichtigt. Sobald bspw. eine Datei im angegebenen Verzeichnis verändert oder gelöscht wurde, bekommen wir dies über die Ereignissteuerung der FileSystemWatcher-Klasse angezeigt. Auch wenn innerhalb des zu überwachenden Verzeichnisses eine neue Datei oder ein neuer Ordner erstellt wurde, benachrichtigt uns die Klasse über ein entsprechendes Ereignis.

Erstellen Sie ein neues Windows-Forms-Projekt und platzieren auf die Form eine TextBox (txtFolder), rechts daneben einen Button zur Ordnerauswahl (btnFolder), darunter noch zwei weitere Schaltflächen (btnStart und btnEnd), sowie eine MultiLine-TextBox (txtStatus), in der die einzelnen Benachrichtigungen ausgegeben werden.

Fügen Sie nachfolgenden Code in den Codeteil der Form ein:

Public Class Form1
  Inherits System.Windows.Forms.Form
 
  ' FileSystemWatcher-Objekt erzeugen
  Dim WithEvents FileSystemWatcher1 As New System.IO.FileSystemWatcher

Beim Klick auf den kleinen Button rechts neben der TextBox soll der Standard-Verzeichnis-Auswahldialog angezeigt werden:

  Private Sub btnFolder_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnFolder.Click
 
    ' Ordner auswählen
    Dim oFolderDialog As New FolderBrowserDialog
    With oFolderDialog
      .Description = "Wählen Sie den zu überwachenden Ordner aus"
      .RootFolder = Environment.SpecialFolder.MyComputer
      If txtFolder.Text.Length > 0 AndAlso System.IO.Directory.Exists(txtFolder.Text) Then
        .SelectedPath = txtFolder.Text
      End If
 
      If .ShowDialog() = DialogResult.OK Then
        txtFolder.Text = .SelectedPath()
      End If
    End With
  End Sub

Über die Schaltfläche "Start" wird die Verzeichnis-Überwachung gestartet:

  Private Sub btnStart_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnStart.Click
 
    ' Überwachung starten
    If txtFolder.Text.Length > 0 AndAlso System.IO.Directory.Exists(txtFolder.Text) Then
      btnStart.Enabled = False
      btnEnd.Enabled = True
 
      With FileSystemWatcher1
        ' zu überwachendes Verzeichnis
        .Path = txtFolder.Text
 
        ' alle Dateien
        .Filter = ""
 
        ' auch Unterverzeichnisse überwachen?
        .IncludeSubdirectories = False
 
        ' Benachrichtigungsfilter festlegen
        .NotifyFilter = IO.NotifyFilters.LastAccess Or IO.NotifyFilters.LastWrite Or _
          IO.NotifyFilters.FileName Or IO.NotifyFilters.DirectoryName
 
        ' Ereignissteuerung (Überwachung) starten
        .EnableRaisingEvents = True
      End With
    Else
      MessageBox.Show(ControlChars.CrLf & "Bitte wählen Sie ein gültiges Verzeichnis aus!", _
        "Fehler!", MessageBoxButtons.OK)
      txtFolder.Focus()
    End If
  End Sub

Während der Verzeichnisüberwachung werden sämtliche Benachrichtigungen der FileSystemWatcher-Klasse in der MultiLine-TextBox protokolliert:

  Private Sub FileSystemWatcher1_Changed(ByVal sender As System.Object, _
    ByVal e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Changed
    ' Datei/Ordner wurde verändert
    AddStatus(e.ChangeType.ToString & ": " & e.FullPath)
  End Sub
 
  Private Sub FileSystemWatcher1_Renamed(ByVal sender As System.Object, _
    ByVal e As System.IO.RenamedEventArgs) Handles FileSystemWatcher1.Renamed
    ' Datei / Ordner wurde umbenannt
    AddStatus(e.ChangeType.ToString & ": " & e.OldFullPath & " -> " & e.FullPath)
  End Sub
 
  Private Sub FileSystemWatcher1_Deleted(ByVal sender As System.Object, _
    ByVal e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Deleted
    ' Datei/Ordner wurde gelöscht
    AddStatus(e.ChangeType.ToString & ": " & e.FullPath)
  End Sub
 
  Private Sub FileSystemWatcher1_Created(ByVal sender As System.Object, _
    ByVal e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Created
    ' Neue Datei/Ordner wurde erstellt
    AddStatus(e.ChangeType.ToString & ": " & e.FullPath)
  End Sub
  Private Sub AddStatus(ByVal sText As String)
    ' Status-Fenster aktualisieren
    With txtStatus
      .Text = .Text & sText & ControlChars.CrLf
      .SelectionStart = .TextLength + 1
      .SelectionLength = 0
    End With
  End Sub

Beim Klick auf den "End"-Button und beim Schließen der Form wird die Verzeichnisüberwachung wieder ausgeschaltet.

  Private Sub btnEnd_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnEnd.Click
    ' Überwachung beenden
    FileSystemWatcher1.EnableRaisingEvents = False
    btnStart.Enabled = True
    btnEnd.Enabled = False
  End Sub
 
  Private Sub Form1_Closing(ByVal sender As Object, _
    ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    ' Überwachung beenden
    FileSystemWatcher1.EnableRaisingEvents = False
  End Sub
End Class