

Delphi - načítanie z INI súboru
Mám túto metódu:
procedure TfrmCustomHead.FormCreate(Sender: TObject);
var
Ini: TIniFile;
i: Byte;
begin
Ini := TIniFile.Create(MainForm.PrgPath + 'Spanwin.ini');
for i := 0 to 11 do
Ini.ReadString('Head', 'HeadString' + IntToStr(i), HeadString[i]);
Ini.Free;
end;
A tento INI súbor:
[Head]
HeadString0=0
HeadString1=1
HeadString2=2
HeadString3=3
HeadString4=4
HeadString5=5
HeadString6=6
HeadString7=7
HeadString8=8
HeadString9=9
HeadString10=10
HeadString11=11
Načítané reťazce sú prázdne. Vie mi niekto vysvetliť, kde robím chybu? Táto metóda funguje dobre:
procedure TfrmCustomHead.bbOKClick(Sender: TObject);
var
Ini: TIniFile;
i: Byte;
begin
Ini := TIniFile.Create(MainForm.PrgPath + 'Spanwin.ini');
for i := 0 to 11 do
begin
HeadString[i] := (Panel.Controls[i] as TEdit).Text;
Ini.WriteString('Head', 'HeadString' + IntToStr(i), HeadString[i]);
end;
Ini.Free;
end;
A ja jen doplnim, pokud bude ten soubor vetsi, pouzij radeji TMemIniFile. Je to Delphi implmentace souboru, pouziva neco jako indexovane polozky, takze prace s tim je mnohem rychlejsi.
Staci zmenit deklaraci TIniFile za TMemIniFile, to je vse.
Áno, ďakujem. Raz dávnejšie som sa aj tak zamýšlal nad tým, že čo potom, ak sa pracuje s dlhým súborom (síce to nie je môj prípad). Že to iba zaťaží Delphi. NO a rozmýšlal som ako by to bolo lepšie riešiť. Ale nedáva si TMemIniFile šetko do pamäti? Teda tak to chápem z názvu (presnejšie povedané, doteraz som si to tak myslel).
Podla knihy co mam o Delphi rozdiel medzi TMemIniFile a TIniFile je ze TMemIniFile nepracuje s fyzickym suborom na disku ale vsetky udaje pre zvysenie rychlosti uklada do vyrovnavacej pamate. Na disk ich zapise az ked sa zavola metoda UpdateFile.
Důležité ovšem je, že TIniFile používá Woknouzí API funkce pro práci s INI soubory a ty nedovedou pracovat s delším jak 64KB. Kdežto v TMemIniFile (a potažmo, leč zdroják jsem nezkoumal, v TRegistryIniFile) si to ovládá Delphi na svoje triko, právě kvůli tomuto omezení.