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 |