in meinen Filemanager Projekt habe ich eine Ordnerüberwachung eingefügt, die mit
hilfe von dem API Befehl FindFirstChangeNotification und WaitForSingleObject
auch umgesetzt habe.
Code: Alles auswählen
tructure Look ; Verzeichnisüberwachung
Thread.i : Gadget.i
Directory.s
Milliseconds.l
stop.i
EndStructure
Procedure VerzeichnisUeberwachung(*SLook.Look)
Protected exit.l,refresh.i,datein.i,backup.i
Debug "Watch auf "+*SLook\Directory + " gestartet !"
While exit = 0
If *SLook\Gadget=ExplorerList_0
hchangeobject0=FindFirstChangeNotification_(*SLook\Directory,0,3)
If WaitForSingleObject_(hchangeobject0,*SLook\milliseconds)= 0
datein=1
If *slook\stop
;soll den Überwachungs Thread beenden
FindCloseChangeNotification_(hchangeobject0)
exit=1
Break
EndIf
Else
backup=1
If datein
If backup
backup=0 : datein=0
;dient dem Refresh des ListGadget0
PostEvent(#MyWatchFolder,Pure_Commander,0,0,*SLook)
EndIf
EndIf
EndIf
FindNextChangeNotification_(hchangeobject0)
ElseIf *SLook\Gadget=ExplorerList_1
hchangeobject1=FindFirstChangeNotification_(*SLook\Directory,0,3)
If WaitForSingleObject_(hchangeobject1,*SLook\milliseconds)= 0
datein=1
If *slook\stop
FindCloseChangeNotification_(hchangeobject0)
exit=1
Break
EndIf
Else
backup=1
If datein
If backup
backup=0 : datein=0
;dient dem Refresh des ListGadget1
PostEvent(#MyWatchFolder,Pure_Commander,0,0,*SLook)
EndIf
EndIf
EndIf
FindNextChangeNotification_(hchangeobject1)
EndIf
Wend
EndProcedure
1. wenn ich ein Verzeichnis mit meinen FileManger öffne so wird dieses auch korrekt überwacht,
2. sobald ich aus diesem Verzeichnis wieder raus gehe, wird mein Überwachungsthread auch sauber beendet,
3. möchte ich nun das Verzeichnis löschen, in dem ich mich voher befunden habe funzt diese nicht richtig,
4. erstelle das voher gelöschte Verzeichnis erneut, kommt es zur der Fehlermeldung Verzeichnis kann nicht erstellt werden !
Das lässt den Schuß zu, dass ich die Überwachung von FindFirstChangeNotification und WaitForSingleObject
die eigentlich mit hilfe von FindCloseChangeNotification beendet werden sollte, nicht korekt benendet habe.
Ich hoffe das ihr mir da auf die sprünge helfen könnt