| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 | 
							- unit FileChanges;
 
- {==================================================================
 
-  Component TDeleteThread  /  Version 1.0  / 01.1999
 
-  ==================================================
 
-     Description:
 
-     ============
 
-     Runs a separate thread, wich monitors multiple files or directories
 
-     for existance. When one of these is deleted, the event OnSignalDelete
 
-     is fired.
 
-     This component uses findfirst() for searching the monitored files. So
 
-     it will also work with network drives. (The WINAPI function
 
-     FINDFIRSTCHANGENOTIFICATION does not work with novell network drives.)
 
-     Author:
 
-     =======
 
-     (c) Ingo Eckel 12/1998
 
-     Sodener Weg 38
 
-     65812 Bad Soden
 
-     Germany
 
- {==================================================================}
 
- interface
 
- uses
 
-   SysUtils, Windows, Classes, CompThread;
 
- type
 
-   TFileDeleteEvent = procedure (Sender: TObject; Files : TStringList) of object;
 
- {==============================================================}
 
- { FileDeleteThread:                                            }
 
- {==============================================================}
 
-   TFileDeleteThread = class(TCompThread)
 
-   private
 
-     fOnSignalDelete: TFileDeleteEvent;
 
-     fFiles         : TStringList;
 
-     fDelFiles      : TStringList;
 
-     fEndTime       : FILETIME;
 
-   protected
 
-     procedure Execute;           override;
 
-     procedure DoTerminate;       override;
 
-     Procedure DoOnSignalDelete;
 
-   public
 
-     constructor Create(Files: TstringList; TimeOut : DWord; SignalProc : TFileDeleteEvent);
 
-     property Terminated;
 
-   published
 
-     property OnSignalDelete : TFileDeleteEvent read fOnSignalDelete
 
-                                                      write fOnSignalDelete;
 
-   end;
 
- {==============================================================}
 
- implementation
 
- {==============================================================}
 
- uses
 
-   PasTools;
 
- {==============================================================}
 
- { FileDeleteThread:                                            }
 
- {==============================================================}
 
- constructor TFileDeleteThread.Create(Files: TstringList; TimeOut : DWord; SignalProc : TFileDeleteEvent);
 
- Begin
 
-   inherited Create(True);
 
-   FreeOnTerminate := TRUE;
 
-   fOnSignalDelete := SignalProc;
 
-   fFiles    := TStringList.Create;
 
-   fDelFiles := TStringList.Create;
 
-   FFiles.Assign(Files);
 
-   GetSystemTimeAsFileTime(fEndTime);
 
-   INT64(fEndTime) := INT64(fEndTime) + TimeOut * 10000000;
 
-   Resume;
 
- End; {TFileDeleteThread.Create}
 
- procedure TFileDeleteThread.Execute;
 
- Var SRec     : TSearchRec;
 
-     i        : Integer;
 
-     DosError : Integer;
 
-     ChangeDetected : Boolean;
 
-     ThisTime : FILETIME;
 
- Begin
 
-   repeat
 
-     {Wait 500 Milliseconds before starting next polling cyclus:}
 
-     Sleep(500);
 
-     ChangeDetected := False;
 
-     i := 0;
 
-     While i <= Pred(fFiles.Count) Do
 
-     Begin
 
-       DosError := SysUtils.FindFirst(ApiPath(fFiles[i]), faAnyFile, SRec);
 
-       IF DosError <> 0 Then
 
-       Begin
 
-         ChangeDetected := True;
 
-         fDelFiles.Add(fFiles[i]);
 
-         fFiles.Delete(i);
 
-       End
 
-       Else
 
-       INC(i);
 
-       SysUtils.FindClose(SRec);
 
-     End;
 
-     IF ChangeDetected And Assigned(fOnSignalDelete) Then
 
-     Begin
 
-        Synchronize(DoOnSignalDelete);
 
-        fDelFiles.Clear;
 
-     End;
 
-     {Timeout reached? }
 
-     GetSystemTimeAsFileTime(ThisTime);
 
-     IF INT64(ThisTime) >= INT64(fEndTime) Then
 
-       Break;
 
-   until Terminated Or (fFiles.Count = 0);
 
- End; {TFileDeleteThread.Execute}
 
- procedure TFileDeleteThread.DoTerminate;
 
- Begin
 
-   fFiles.Free;
 
-   fDelFiles.Free;
 
-   Inherited DoTerminate;
 
- End; {TFileDeleteThread.DoTerminate}
 
- Procedure TFileDeleteThread.DoOnSignalDelete;
 
- Begin
 
-   If Assigned(fOnSignalDelete) Then
 
-   fOnSignalDelete(Self, fDelFiles);
 
- End; {TFileDeleteThread.DoSignalDelete}
 
- end.
 
 
  |