Hola de nuevo,
Os pego el trozo de codigo (aparecen variables declaradas globalmente) en el que estoy trabajando
que de momento parece que me funciona aunque seguro que se puede mejorar/optimizar, pero es por donde voy :-)
Código Delphi
[-]
procedure TfrmPrinc.bProcesarClick(Sender: TObject);
var
vLinea:String;
begin
bSalir:=False;
PosUltimaLinea:=0;
while Not bSalir do
begin
vLinea:=GetLastLine(sDirTrab+'\'+sArchLog);
mLog.lines.add(vLinea);
end;
end;
function TfrmPrinc.GetLastLine(const aFileName: string): string;
var
buf : Char;
i,j,PosiLinea : LongInt;
begin
FSPrin := TFileStream.Create(aFileName, fmOpenRead + fmShareDenyNone );
try
bLinea:=False;
while Not bLinea do
begin
i := FSPrin.Size-nCarLi;
PosUltimaAux:=i+nCarLi;
if PosUltimaAux<>PosUltimaLinea then
begin
try
PosUltimaLinea:=PosUltimaAux;
buf:=#0;
FSPrin.Seek(i, soBeginning);
FSPrin.Read(buf, SizeOf(buf));
if (buf = #10) or (buf = #13) then
begin
bLinea:=True;
PosiLinea:=i;
end;
except;
end;
Application.ProcessMessages;
if bSalir then begin break; exit; end;
end;
Application.ProcessMessages;
if bSalir then begin break; exit; end;
Sleep(strtoint(dfRetardo.Text));
end;
Result := '';
Buf:=#0;
i := 1;
while (buf <> #10) and (buf <> #13) and (FSPrin.position<>0) do
begin
try
buf:=#0;
FSPrin.Position:=PosiLinea-i;
FSPrin.Read(buf, SizeOf(buf));
if (buf <> #10) and (buf <> #13) then
Insert(buf, Result, 1);
Inc(i);
except;
end;
Application.ProcessMessages;
if bSalir then exit;
end;
finally
FSPrin.Free;
end;
end;