Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Ведение 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;
Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay