Ведение log файлов
Автор: Separator
WEB-сайт: http://delphibase.endimus.com
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Ведение log файлов
С помощью этих процедур можно вести log.
procedure AddLog(LogString: String; LogFileName: string); -
добавляет одну строку к log файлу
procedure GetLog(Count: integer; Strings: TStrings; LogFileName: string); -
возвращает последние Count записей
Зависимости: Classes, SysUtils
Автор: Separator, vilgelm@mail.kz, Алматы
Copyright: Вильгельм Сергей
Дата: 8 января 2003 г.
***************************************************** }
procedure AddLog(LogString: string; LogFileName: string);
var
F: TFileStream;
PStr: PChar;
LengthLogString: integer;
begin
LengthLogString := Length(LogString) + 2;
LogString := LogString + #13#10;
PStr := StrAlloc(LengthLogString + 1);
StrPCopy(PStr, LogString);
if FileExists(LogFileName) then
F := TFileStream.Create(LogFileName, fmOpenWrite)
else
F := TFileStream.Create(LogFileName, fmCreate);
F.Position := F.Size;
F.Write(PStr^, LengthLogString);
StrDispose(PStr);
F.Free;
end;
procedure GetLog(Count: integer; Strings: TStrings; LogFileName: string);
var
F: TFileStream;
PStr: PChar;
St: string;
i, LenBlock, LenFirstString, LenTemp: integer;
TempStrings: TStringList;
begin
if FileExists(LogFileName) then
begin
LenBlock := 4000;
TempStrings := TStringList.Create;
F := TFileStream.Create(LogFileName, fmOpenRead);
F.Position := F.Size;
LenFirstString := 0;
PStr := StrAlloc(LenBlock);
repeat
if F.Position - LenBlock < 0 then
begin
LenBlock := F.Position;
StrDispose(PStr);
PStr := StrAlloc(LenBlock);
end;
F.Position := F.Position - LenBlock;
F.Read(PStr^, LenBlock);
St := PStr;
SetLength(St, LenBlock);
TempStrings.Text := St;
F.Position := F.Position - LenBlock;
if F.Position <> 0 then
begin
LenFirstString := Length(TempStrings.Strings[0]);
TempStrings.Delete(0)
end
else
LenFirstString := 0;
F.Position := F.Position + LenFirstString;
for i := TempStrings.Count - 1 downto 0 do
begin
Strings.Add(TempStrings.Strings[i]);
if Strings.Count = Count then
begin
F.Free;
TempStrings.Free;
StrDispose(PStr);
exit
end
end;
until F.Position = 0;
StrDispose(PStr);
F.Free;
TempStrings.Free
end
end;
Пример использования:
procedure TForm1.Button1Click(Sender: TObject);
begin
AddLog(Edit1.Text);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ListBox1.Items.Clear;
GetLog(50, ListBox1.Items);
end;
|