Наткнулся на кроссплатформенные наработки по отслеживанию изменений в каталоге https://github.com/Wosi/DirectoryWatcher
Демка консольная работает, отслеживает каталог и подкаталоги. Как заставить работать в обычном приложении?
Пробовал так, но вызывается исключение 'External: SIGSEGV'.
- Код: Выделить всё
unit main;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
DirectoryWatcherBuilder, DirectoryWatcherAPI;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
procedure OnFileEvent(const FilePath: String; const EventType: TDirectoryEventType);
public
end;
var
Form1: TForm1;
DirWatcher: IDirectoryWatcher;
FolderToWatch: String;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.OnFileEvent(const FilePath: String; const EventType: TDirectoryEventType);
var
EventTypeString: String;
begin
Memo1.Lines.Add('======NEW EVENT======');
Memo1.Lines.Add('File: ' + FilePath);
case EventType of
detAdded: EventTypeString := 'ADDED';
detRemoved: EventTypeString := 'REMOVED';
detModified: EventTypeString := 'MODIFIED';
end;
Memo1.Lines.Add('Type: ' + EventTypeString);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FolderToWatch := ExtractFileDir(ParamStr(0));
DirWatcher := TDirectoryWatcherBuilder.New.WatchDirectory(FolderToWatch).Recursively(True).Build;
DirWatcher.Start;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
DirWatcher := nil;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Memo1.Lines.SaveToFile(ExtractFileDir(ParamStr(0)) + '\fl.txt');
end;
end.