скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Ведение log файлов



Автор: Separator

{ **** 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;





Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook