Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Проблемы INI-файла

01.01.2007

Кто-нибудь имел какие-нибудь проблемы при использовании модуля TIniFile? Я думаю здесь какая-то детская проблема с кэшированием!!!

Вот что я делал:

(* c:\test.ini уже существует *)
myIni := TIniFile.Create('c:\test.ini');
With myIni do
begin
  // .... (добавляем новую секцию в test.ini
end;
myIni.Free;
RenameFile('c:\test.ini', 'c:\test1.ini');

Что я получил:

test1.ini НЕ ИМЕЕТ добавленной мною секции;

всякий раз при создании или открытии нового файла в том же самом каталоге с помощью File Manager, 'c:\test.ini' появляется вновь, и у него СУЩЕСТВУЕТ секция, которую я добавлял.

Я решил эту проблему добавлением следующей строки перед IniFile.Free:

WritePrivateProfileString(nil, nil, nil, PChar(IniFileName));

Для получения дополнительной информации обратитесь к электронной справке к разделу 'WritePrivateProfileString'

Автор: Tony Chang

 


Как указать системе на необходимость сбросить буфер INI-файла на диск

procedure FlushIni(FileName: string);
var
  {$IFDEF WIN32}
  CFileName: array[0..MAX_PATH] of WideChar;
  {$ELSE}
  CFileName: array[0..127] of Char;
  {$ENDIF}
begin
  {$IFDEF WIN32}
  if (Win32Platform = VER_PLATFORM_WIN32_NT) then
    WritePrivateProfileStringW(nil, nil, nil, StringToWideChar(FileName,
    CFileName, MAX_PATH))
  else
    WritePrivateProfileString(nil, nil, nil, PChar(FileName));
  {$ELSE}
  WritePrivateProfileString(nil, nil, nil, StrPLCopy(CFileName,
  FileName, SizeOf(CFileName) - 1));
  {$ENDIF}
end;

Взято с https://delphiworld.narod.ru