opdag en update i en txt fil

Tags:    delphi

er der en måde man kan få sit program til at reagere hvis en txt fil bliver ændret.
fks hvis jeg ændre inholdet i bla.txt med notepad så hopper mit program frem og og reloader den, for at være opdateret hele tiden.
-----
muh



5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
unskyld forsinkelsen. men jeg havde egligt renet med jeg fik en e-mail nå nogle svarede.

det med timer har jeg prøver og syntes det er upraktisk.
men det du skriver om data er da meget interasant men jeg er hvist desvære ik helt ferm nok til at bruge det uden et eksempel. så hvis du gider må du gerne det..
-----
muh


Så skidt da. Nedenstående er testet med D5, men virker sikkert med andre. Start på et nyt program. Smid en memo (memo1), to knapper (button1 + button2) på formen, og brug flg. kode:
<pre>
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

const
msgChanged = wm_user + 1;

type
TWatchThread= class(TThread)
private
{ Private declarations }
hndChange: THandle;
protected
procedure Execute; override;
end;


TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
WatchThread: TWatchThread;
procedure cmChanged(var msg: TMessage); message msgChanged;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
WatchThread.Resume; //Start tråd
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
WatchThread.Suspend; //Stop tråd midlertidigt
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
WatchThread := TWatchThread.Create(true); //Opret tråd-object
WatchThread.FreeOnTerminate := true; //Tråd-object skal free sig selv
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
WatchThread.Resume; //Start tråd, så vi kan nedlægge den
WatchThread.Terminate; //Fortæl tråd den skal stoppe
WatchThread.WaitFor; //Vent til tråd er stoppet
end;

procedure TForm1.cmChanged(var msg: TMessage);
begin
memo1.lines.add('Change detected'); //Her kunne vi også indlæse en fil og vise den.
end;

{ TWatchThread }

procedure TWatchThread.Execute;
begin
//Start med at overvåge c:\\, ingen subdirs og signaler på ændrede størrelser af filer. Se hjælp til FindFirstChangeNotification for andre signaler
hndChange := FindFirstChangeNotification('c:\\', false, FILE_NOTIFY_CHANGE_SIZE);
while not terminated do //Bliv ved til tråd termineres
begin
if WaitForSingleObject(hndChange, 0) = WAIT_OBJECT_0 then //Check om der er sket ændringer
begin
SendMessage(Form1.Handle, msgChanged, 0, 0); //Ja, send besked til hovedprogram
FindNextChangeNotification(hndChange); //Fortsæt med at kigge efter ændringer
end;
end;
FindCloseChangeNotification(hndChange); //Vi er færdige. Hold op med at kigge efter ændringer
end;

end.
</pre>

/data[Redigeret d. 28/08-02 23:33:57 af data]



Du kan vel lave en timer som heletiden får opdaterings datoen på filen.
Hvis filen så har en anden dato en den programmet har så gør den et eller andet..

Med venlig hilsen
Ken Christensen
Christensenken@hotmail.com
www.kenchristensen.tk



er der en måde man kan få sit program til at reagere hvis en txt fil bliver ændret.
fks hvis jeg ændre inholdet i bla.txt med notepad så hopper mit program frem og og reloader den, for at være opdateret hele tiden.
-----
muh


Du kan bruge WaitForSingleObject sammen med FindFirstChangeNotification til at få at vide når der sker noget nyt i et directory. Så kan du bruge det til at gen-indlæse din fil. Det er selvf. ikke smart, hvis der sker mange ændringer i det directory filen er placeret i.

/data



unskyld forsinkelsen. men jeg havde egligt renet med jeg fik en e-mail nå nogle svarede.

det med timer har jeg prøver og syntes det er upraktisk.
men det du skriver om data er da meget interasant men jeg er hvist desvære ik helt ferm nok til at bruge det uden et eksempel. så hvis du gider må du gerne det..
-----
muh



Hej,

Jeg tror du kan bruge "Shell change notifier".
Komponentet ligger i "Samples" I Deplhi 6.

Ken Christensen
Kenman@Kenman.tk
www.kenman.tk



t