Die etwas kompliziertere Variante wäre dann noch diese:
Delphi-Quellcode:
const MAX_INI_SIZE = 262144;
////////////////////////////////////////////////////////////////////////////////
// Größe einer Datei ermitteln
////////////////////////////////////////////////////////////////////////////////
function GetFileSize(const FileName: String): Int64;
var FileHandle: Cardinal; var Data: WIN32_FIND_DATA;
begin
Result := -1;
FileHandle := FindFirstFile(PChar(FileName), Data);
try
if FileHandle > 0 then
begin
Int64Rec(Result).Hi := Data.nFileSizeHigh;
Int64Rec(Result).Lo := Data.nFileSizeLow;
end;
finally Windows.FindClose(FileHandle);
end;
end;
////////////////////////////////////////////////////////////////////////////////
// Entfernt Tabs und Leerzeichen an Anfang und Ende eines
// jeden Eintrags in einer Liste
////////////////////////////////////////////////////////////////////////////////
procedure TrimIni(const Ini: TStringList);
var i: Integer;
begin
for i := 0 to Ini.Count -1 do
if Ini[i] <> '' then
Ini[i] := Trim(Ini[i]);
end;
////////////////////////////////////////////////////////////////////////////////
// Versucht eine "Ini-Datei" einzulesen
////////////////////////////////////////////////////////////////////////////////
function OpenIni(const FileName: String; const Ini: TStringList): Boolean;
var FileSize: Int64;
begin
Result := False;
FileSize := GetFileSize(FileName);
if FileSize <> -1 then
begin
if FileSize < MAX_INI_SIZE then
begin
try
Result := True;
Ini.LoadFromFile(FileName);
except
Result := False;
end;
if Result then TrimIni(Ini);
end;
end;
end;
////////////////////////////////////////////////////////////////////////////////
// Alle Gruppen auslesen
////////////////////////////////////////////////////////////////////////////////
procedure ReadSections(const Ini, Sections: TStringList);
var i, p: Integer;
begin
Sections.Clear;
for i := 0 to Ini.Count -1 do
begin
if Ini[i] <> '' then
begin
if Ini[i][1] = '[' then
begin
p := PosShaAsm5(']', Ini[i]); // ersetzen durch POS()
if p > 2 then
Sections.Add(Copy(Ini[i], 1, p));
end;
end;
end;
end;
Benötigt werden 2 Listen vom Typ
TStringList.