Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#6

AW: INI File Schreiben und auslesen

  Alt 13. Mär 2014, 20:29
Beispiel:

Delphi-Quellcode:
uses
  IniFiles;

procedure TForm1.Button1Click(Sender: TObject);
var
  Path, FileName: String;
  IniFile: TIniFile;
  s: String;
begin
  Path := ExtractFilePath(ParamStr(0)); //hat schon ein Backslash am Ende
  Path := IncludeTrailingPathDelimiter(Path); //braucht man hier nicht, wenn man sich aber unsicher ist, ist es nicht falsch
  FileName := 'Einstellungen.ini';

  //Erstellt falls nötig den Unterordner
  if not ForceDirectories(Path + 'INI') then
  begin
    MessageDlg('Es wurde kein Unterordner angelegt', mtError, [mbOK], 0);
    Exit;
  end;

  //Alternative: Prüft auf Unterordner
  {if not DirectoryExists(Path + 'INI') then
  begin
    MessageDlg('Es wurde kein Unterordner gefunden', mtError, [mbOK], 0);
    Exit;
  end; }


  IniFile := TIniFile.Create(Path + FileName);
  try
    IniFile.WriteString('Sektion', 'Ident', 'Wert');

    s := IniFile.ReadString('Sektion', 'Ident', 'Ersatzwert bei Fehler');
  finally
    IniFile.Free;
  end;

  ShowMessage(s);
end;
Ini ist eine ganz normale Klasse, sie unterschiedet sich von den meisten vielleicht dadurch, dass man in Create ein Pfad angeben muss. Experimentiere nicht mit dem Pfad, sondern liefere etwas mit Hand und Fuß. Wenn du keine Ahnung hast was für ein Pfad du angibst, dann weißt du auch nicht wo die Ini landet.

Das sieht nicht gut aus: ExtractFilePath(ParamStr(0)) + './ini/einstellungen.ini'; ExtractFilePath liefert immer ein Backslash am Ende, also z. B. c:\Temp\Übungen\Projekt1\. Du brauchst also nach ExtractFilePath keinen Backslash angeben (schon gar nicht ein Slash).

Bist du nicht sicher ob am Ende ein Backslash ist, überprüfe es oder verwende die Funktion IncludeTrailingPathDelimiter . Sie macht nichts kaputt, man kann sie zur Not also immer verwenden. Wenn da bereits ein Backslash am Ende ist, wird nichts gemacht, sonst Backslash angefügt.

Willst du es in einen Ordner schrieben, dann in der Form: ExtractFilePath(ParamStr(0)) + 'ini/einstellungen.ini'; . Wie gesagt, ExtractFilePath liefert am ende immer einen Backslash.
Fehlt der Ordner "Ini\", gibt es eine Fehlermeldung. Also vorher vergewissern ob der Ordner existiert. Oder mit ForceDirectories erstellen.

Der Rest ist üblich wie bei anderen Klassen: Objekt deklarieren und erstellen, mit Objekt arbeiten, zuletzt IniFile Objekt freigeben.
  Mit Zitat antworten Zitat