Архив исходников программ, модулей и компонентов на Delphi


Начальная страница

Поиск по базе



Операционная система
Настройка приложения
Взаимодействия приложений
Файлы и директории
Строки и символы
Математика
Базы данных
Интернет и сеть
Мультимедиа
Аппаратная часть
VCL
Другие разделы [0]
 

Количество записей в базе - 537
Сегодня добавлено – 0

Ini-, Log- и др. спецфайлы



Вернуться к списку функций
 Некоторые модификации методов ReadSection и ReadSections объекта, типа TIniFile

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

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

 Зависимости:
Windows, SysUtils, Classes, IniFiles

 Ограничения:
win2k delphi 5

 Исходный текст:
{ **** UBPFD *********** by http://kladovka.net.ru/delphibase/ ****
>> Некоторые модификации методов 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;
...


Вернуться к списку функций

Наверх ▲