Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TIniFile: "ReadSections" funktioniert nicht (https://www.delphipraxis.net/50983-tinifile-readsections-funktioniert-nicht.html)

Pseudemys Nelsoni 3. Aug 2005 20:02


TIniFile: "ReadSections" funktioniert nicht
 
Moin,

Ich habe eine Ini-Datei die folgendermassen aussieht:

Zitat:

[asdf:12..45]
blah 1 blah2=hi.ho
Und versuche folgendermassen die sektion (asdf:12..45) zu bekommen:

Delphi-Quellcode:
procedure TForm2.FormShow(Sender: TObject);
var
  Ini: TIniFile;
  ServerGroups: TStringList;
begin
  // Server laden
  if FileExists('servers.ini') then
  begin
    ServerGroups := TStringList.Create;
    Ini := TIniFile.Create('servers.ini');
    try
      ini.ReadSections(ServerGroups);
      Showmessage(IntToStr(ServerGroups.Count));
    finally
      Ini.Free;
      ServerGroups.Free;
    end;
  end;
end;
Wieso zeigt mir das ShowMessage 0 an? Ich müsste mit dem Code doch eine Sektion in meiner Stringlist haben oder?

Lannes 3. Aug 2005 20:27

Re: TIniFile: "ReadSections" funktioniert nicht
 
Hallo,

Du musst die Section mit angeben;
Delphi-Quellcode:
ini.ReadSection('asdf:12..45',ServerGroups);//alle Namen der Werte
ini.ReadSectionValues('asdf:12..45',ServerGroups);//alle Werte

Luckie 3. Aug 2005 20:28

Re: TIniFile: "ReadSections" funktioniert nicht
 
Äh, wie oft eiegntlich noch:
Delphi-Quellcode:
Ini := TIniFile.Create('servers.ini');
Wenn du sie auch so erstellt hast, dann guck mal, ob du sie im Windowsverzeichnis wieder findest. Und beim Laden gib mal den vollen absoluten Pfad an.

Pseudemys Nelsoni 3. Aug 2005 20:34

Re: TIniFile: "ReadSections" funktioniert nicht
 
Hallo Lannes,

das Problem ist, das ich die Sektionen nicht kenne, ich möchte sie mir nur alle in eine StringList laden. ne Ahnung wie das geht?

@Luckie: DIe Datei gibts in meinem Windows(System)-Ordner nicht, es wird shcon die richtige Datei hier genommen.

Luckie 3. Aug 2005 20:36

Re: TIniFile: "ReadSections" funktioniert nicht
 
Da wäre ich mir nicht so sicher. Bist du sicher, dass das Arbeitsverzeichnis zu dem Zeitpunkt auch das Programmverzeichnis deiner Anwendung ist? Ich würde mich nicht drauf verlassen. Aber wie du meinst.

x000x 3. Aug 2005 20:40

Re: TIniFile: "ReadSections" funktioniert nicht
 
Moin moin,

die Unit IniFiles verwendet intern die funktion GetPrivateProfileString

Zitat:

Zitat von delphi
..
lpFileName

Pointer to a null-terminated string that names the initialization file. If this parameter does not contain a full path to the file, Windows searches for the file in the Windows directory.

Luckie hat also vollkommen recht...

Pseudemys Nelsoni 3. Aug 2005 21:07

Re: TIniFile: "ReadSections" funktioniert nicht
 
Schon, aber da keine Datei namens "servers.ini" im Windowsdir vorhanden ist, wird die aus dem Programmpfad benutzt.

x000x 3. Aug 2005 21:25

Re: TIniFile: "ReadSections" funktioniert nicht
 
Zitat:

Zitat von Pseudemys Nelsoni
...wird die aus dem Programmpfad benutzt.

und weil sie eben nicht aus dem Programmpfad benutzt wird, bekommst du auch nur eine Leere Stringliste.
Gebe bei deinem geposteten code den vollen Pfad zu deiner servers.ini an, bzw. kopiere sie
in dein Windowsverzeichnis und du wirst sehen, dass dir die sections alle angezeigt werden.

Delphi-Quellcode:
ServerGroups := TStringList.Create;
Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'servers.ini');
try
  ini.ReadSections(ServerGroups);
  Showmessage(IntToStr(ServerGroups.Count));
finally
  Ini.Free;
  ServerGroups.Free;
end;

Luckie 3. Aug 2005 21:31

Re: TIniFile: "ReadSections" funktioniert nicht
 
Zitat:

Zitat von Pseudemys Nelsoni
Schon, aber da keine Datei namens "servers.ini" im Windowsdir vorhanden ist, wird die aus dem Programmpfad benutzt.

Und woraus schließt du das? Etwa daraus, dass die Stringliste leer ist?

Lannes 3. Aug 2005 22:01

Re: TIniFile: "ReadSections" funktioniert nicht
 
Hallo,

@Pseudemys Nelsoni
hätte besser lesen sollen :pale: ReadSection <> ReadSections

Nimm den Code von x000x dann wird Die ini auch dann gefunden, wenn das aktuelle Arbeitsverzeichnis nicht mit dem Programmverzeichnis identisch ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz