Verzeichnis überwachen (ohne Timer)
Oftmals sehen Schnittstellen mit PC-Programmen so aus, dass Dateien in ein
bestimmtes Verzeichnis abgelegt werden für weitere Verarbeitung in ein anderes
System. Die PC-Programme reagieren im Allgemeinen sofort auf den Empfang der
Dateien in dem Verzeichnis, die AS/400 muss aber warten bis Daten übermittelt
werden.
In diesem Beispiel zeigen wir wie ein Verzeichnis überwacht werden kann. Je
nach Art der Datei kann ein entsprechendes Programm die Datei übermitteln.
Dieses Beispiel geht aus von einer PC-Anwendung mit Export-Funktion um Daten zur
AS/400 zu senden. Im Grunde ist es egal ob diese Daten von einem entfernten
System (z.B. ftp), einer Dialoganwendung oder einem Batchprogramm zu Verfügung
gestellt werden. Lediglich die Tatsache, dass eine Datei erstellt, geändert,
umbenannt oder gelöscht wird, löst eine Verarbeitung aus.
Parameter erlauben die Auswahl von Verzeichnis, Dateiname (oder einem Teil des Namens)
und Art der Änderung.
Üblicherweise werden zur Überwachung Timer benutzt die in regelmäßigen Abständen das Verzeichnis auf Änderungen überprüfen. In diesem Beispiel wird der "FileSystemWatcher" von Windows verwendet. Die Vorteile liegen auf der Hand:
- Die Verarbeitung wird nur aufgerufen wenn tatsächlich Daten angeboten werden.
- Direkt nach Empfang der Daten im Verzeichnis (ohne Verzögerung durch Timer-Intervall) werden die Daten verarbeitet.
Eine ausführliche Beschreibung des "FileSystemWatcher" finden Sie unter:
- Microsoft Visual Studio 2003 (oder 2005)
- Microsoft Windows 2000 / XP
- Microsoft .Net Framework 1.1 (oder höher)
- ASNA Visual RPG 7.1 (oder höher)
Using System
Using System.Drawing
Using System.Collections
Using System.ComponentModel
Using System.Windows.Forms
Using System.Data
Using System.IO
BegClass Form1 Extends(System.Windows.Forms.Form)
Access(*Public)
| [+] | BegSr Dispose Access(*Public)Modifier(*Overrides) |
| [+] | BegConstructorAccess(*Public) [...] |
| [+] | Windows Form Designer generated code |
BegSr Form1_Load Access(*Private)
Event(*this.Load)
DclSrParm sender Type(*Object)
DclSrParm e Type(System.EventArgs)
// Neues Überwachungsobjekt erstellen
DclFld watcher Type(FileSystemWatcher)
New()
// Welches Verzeichnis soll überwacht werden?
watcher.Path = "C:\Temp"
// Welche Dateien sollen überwacht werden?
watcher.Filter = "*.xml"
// Welche Änderungen sollen überwacht werden?
watcher.NotifyFilter = (NotifyFilters.LastAccess *BitOr NotifyFilters.LastWrite
*BitOr NotifyFilters.FileName *BitOr NotifyFilters.DirectoryName)
// Behandlung für Ereignisse festlegen.
AddHandler SourceObject(watcher)
SourceEvent(Created) HandlerObject(*This)
HandlerSr(OnCreate)
AddHandler SourceObject(watcher)
SourceEvent(Changed) HandlerObject(*This)
HandlerSr(OnChange)
AddHandler SourceObject(watcher)
SourceEvent(Deleted) HandlerObject(*This)
HandlerSr(OnDelete)
AddHandler SourceObject(watcher)
SourceEvent(Renamed) HandlerObject(*This)
HandlerSr(OnRename)
// Starte Überwachung
watcher.EnableRaisingEvents = *True
EndSr
BegSr OnCreate
DclSrParm sender Type(*Object)
DclSrParm e Type(FileSystemEventArgs)
MsgBox Msg("Datei: " + e.FullPath + " erstellt...")
EndSr
BegSr OnChange
DclSrParm sender Type(*Object)
DclSrParm e Type(FileSystemEventArgs)
MsgBox Msg("Datei: " + e.FullPath + " geändert...")
EndSr
BegSr OnDelete
DclSrParm sender Type(*Object)
DclSrParm e Type(FileSystemEventArgs)
MsgBox Msg( "Datei: " + e.FullPath + " gelöscht...")
EndSr
BegSr OnRename
DclSrParm sender Type(*Object)
DclSrParm e Type(RenamedEventArgs)
MsgBox Msg("Datei: " + e.OldFullPath + " wurde umbenannt in " + e.FullPath)
EndSr
EndClass