Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Файловая система , Файлы

Ведение 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 для журналирования событий в файле включает два процедура: AddLog и GetLog. Процедура AddLog добавляет строку журнала в конец указанного файла журнала, а процедура GetLog получает последние Count записей из файла журнала.

AddLog

  • Эта процедура принимает два параметра: LogString (строка журнала для добавления) и LogFileName (имя файла журнала).
  • Она сначала проверяет, существует ли файл журнала. Если он существует, она открывает файл в режиме записи; если нет, создает новый файл.
  • Затем она позиционирует поток файла на конце файла и пишет строку журнала, включая символ новой строки (#13#10).
  • Наконец, она освобождает поток файла и любые выделенные ресурсы.

GetLog

  • Эта процедура принимает три параметра: Count (число записей для извлечения), Strings (объект TStrings, в котором будут храниться извлеченные записи) и LogFileName (имя файла журнала).
  • Она сначала проверяет, существует ли файл журнала. Если он существует, она открывает файл в режиме чтения.
  • Затем она инициализирует несколько переменных: LenBlock (размер блока для чтения из файла), TempStrings (временный объект TStringList, в котором будут храниться извлеченные записи) и PStr (указатель на массив символов).
  • Процедура читает файл блоками размером LenBlock символов, конвертирует каждый блок в строку и добавляет ее в объект TempStrings.
  • Затем она перебирает объект TempStrings, добавляя каждую запись в объект Strings, пока не будет извлечено Count записей или не будет достигнут конец файла.
  • Наконец, она освобождает любые выделенные ресурсы и закрывает поток файла.

Пример использования

Приведенный пример демонстрирует, как использовать эти процедуры в Delphi-форме. Событийный обработчик Button1Click вызывает AddLog с текстом из редактора как строкой журнала, а событийный обработчик Button2Click вызывает GetLog, чтобы извлечь последние 50 записей и отобразить их в списке. В целом, это код обеспечивает基本ную механику журналирования, позволяющую добавлять сообщения журнала в файл и извлекать указанное количество записей из файла.

В статье описано ведение журналов (log файлов) в Delphi с помощью процедур AddLog и GetLog, которые позволяют добавлять строки в лог-файл и извлекать последние записи.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Файлы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:41:16/0.0038378238677979/0