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

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

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

;

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com