Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
{ **** 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
.
Пример использования:
varTargetList: 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
;