Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Некоторые модификации методов ReadSection и ReadSections объекта, типа TIniFile

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

Некоторые модификации методов ReadSection и ReadSections объекта, типа TIniFile

Автор: VID
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Некоторые модификации методов ReadSection и ReadSections объекта, типа TIniFile

Отличие функции ReadSectionEx от метода ReadSection, объекта типа TIniFile,
заключается в том, что размер буффера для сохранения содержимого файла,
не является константой (16Кб, в модуле IniFiles.pas), а представляет собой
переменную величину, значение которой равно размеру файла инициализации
(IniFileName). Таким образом решается проблема, с нехваткой выдыленного
размера оперативной памяти для операции чтения содержимого секции (SectionName).
Так же, в случае успешнонго выполнения чтения секции Ini-файла, функция
возвращает количество строк в заполненном списке (Strings)

Функция ReadSectionsEx имеет те же отличия от метода ReadSection, что и функция
ReadSectionEx от метода ReadSection. Функция ReadSectionsEx помещает в список
Strings все секции указанного INI-файла (IniFileName)

Зависимости: Windows, SysUtils, Classes, IniFiles
Автор:       VID, vidsnap@mail.ru, ICQ:132234868, Махачкала
Copyright:   VID (базируется на коде соответствующих методов, в модуле IniFiles.pas)
Дата:        24 мая 2002 г.
***************************************************** }

unit INIExtension;

interface
uses Windows, SysUtils, Classes, IniFiles;

function ReadSectionsEx(IniFileName: string; Strings: TStrings): Integer;
function ReadSectionEx(IniFileName: string; SectionName: string;
  Strings: TStrings): Integer;

implementation

function ReadSectionsEx(IniFileName: string; Strings: TStrings): Integer;
var
  BufSize: Integer;
  SR: TSearchRec;
  buffer, P: Pchar;
begin
  Result := -1;
  if not FileExists(IniFileName) then
    EXIT;
  FindFirst(IniFileName, faAnyFile, SR);
  BufSize := Sr.Size;
  FindClose(SR);
  GetMem(Buffer, BufSize);
  try
    Strings.BeginUpdate;
    try
      Strings.Clear;
      if GetPrivateProfileSectionNames(buffer, BufSize,
        Pchar(IniFileName)) <> 0 then
      begin
        P := Buffer;
        while P^ <> #0 do
        begin
          Strings.Add(P);
          Inc(P, StrLen(P) + 1);
        end;
      end;
      Result := Strings.Count;
    finally
      Strings.EndUpdate;
    end;
  finally
    FreeMem(Buffer, BufSize)
  end;
end;

function ReadSectionEx(IniFileName: string; SectionName: string;
  Strings: TStrings): Integer;
var
  BufSize: Integer;
  SR: TSearchRec;
  buffer, P: Pchar;
begin
  Result := -1;
  FindFirst(IniFileName, faAnyFile, SR);
  BufSize := Sr.Size;
  FindClose(SR);
  GetMem(Buffer, BufSize);
  try
    Strings.BeginUpdate;
    try
      Strings.Clear;
      if GetPrivateProfileString(PChar(SectionName), nil, nil, Buffer, BufSize,
        PChar(IniFileName)) <> 0 then
      begin
        P := Buffer;
        while P^ <> #0 do
        begin
          Strings.Add(P);
          Inc(P, StrLen(P) + 1);
        end;
      end;
      Result := Strings.Count;
    finally
      Strings.EndUpdate;
    end;
  finally
    FreeMem(Buffer, BufSize)
  end;
end;

end.

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

var
  TargetList: TStringList;
  Ini: TIniFile;
begin
  TargetList := TStringList.create;
  Ini := TiniFile.create('system.ini');
  //Заполняем список TargetList параметрами секции boot
  ReadSectionEx(Ini.FileName, 'Boot', TargetList);
  //Заполняем список TargetList именами всех секций
  ReadSectionsEx(Ini.FileName, TargetList);
  Ini.Free;
  TargetList.Free;
end;

Статья Некоторые модификации методов ReadSection и ReadSections объекта, типа TIniFile раздела Файловая система INI файлы может быть полезна для разработчиков на Delphi и FreePascal.


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


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




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



:: Главная :: INI файлы ::


реклама

:: https://drevo-zhizni.info рейки микао усуи инициация - инициация рейки Мастер Учитель.


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
21.09.2020 12:56:36/0.020596981048584/0