Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ini Datei Frage (https://www.delphipraxis.net/2860-ini-datei-frage.html)

flodeluxe 10. Feb 2003 14:58


Ini Datei Frage
 
Hi
Ich habe eine Ini Datei erstellt und schreibe Werte in sie, wie kann ich verhindern, dass jedes mal eine neue Ini Datei erstellt wird und die Alte überschrieben?

Code:
ini:=TIniFile.Create('c:\highscore.ini');
try
if eintrag = true then
  begin
  ini.WriteString('Highscore1', 'Name', name);
  ini.WriteFloat('Highscore1', 'Zeit', zeit);
  ini.WriteInteger('Highscore1','Punkte',punkte);
  eintrag := false;
  end;
if ((ini.SectionExists('Highscore1')) and (eintrag = true)) then
  begin
  ini.WriteString('Highscore2', 'Name', name);
  ini.WriteFloat('Highscore2', 'Zeit', zeit);
  ini.WriteInteger('Highscore2','Punkte',punkte);
  eintrag := false;
  end;
...
Danke im Vorraus

Darty 10. Feb 2003 15:01

Lass doch vorher übreprüfen ob die Datei existiert ..

flodeluxe 10. Feb 2003 15:53

Ja :mrgreen:, dass ist meine Frage wie kann ich das überprüfen?

Chewie 10. Feb 2003 15:54

Schau mal in die Hilfe unter FileExists.

Daniel B 10. Feb 2003 16:17

Hallo flodeluxe,

Dich verwirrt warscheinlich das .Create, zum erzeugen der Datei. Dies gilt aber bei der Ini auch zum "einfachen" öffnen der Datei, soweit vorhanden.
Prüfen kannst Du es mit FileExists.

Delphi-Quellcode:
if FileExists(Meine.ini) then
begin
  //Datei vorhanden
end
else
begin
  //Datei nicht vorhanden
end;
Aber in beiden Fällen musst Du .Create benutzen, ist die Datei vorhanden, wird sie einfach nur geöffnet und was rein geschrieben, wenn nicht, dann wird sie einfach neu erzeugt.

Grüsse, Daniel :hi:

Darty 11. Feb 2003 00:58

Code:
IniPath := ExtractFilePath(Application.EXEName)+'Highscore.ini'
Damit steht Dein Highcore.ini in dem Verzeichnis von wo aus Du Dein Programm startest. Den auf ein Verzeichnis wie C:\highscore.ini oder so würde ich mich nicht festlegen ..

Denkste dann auch an den ini.free ??

flodeluxe 11. Feb 2003 14:08

Ja, das mit dem ini.free mach ich, ich hoffe das ich das Problem noch hinbekommen... :bounce2:
Übrigens danke für den Tipp, wo dei Ini erstellt wird...

Darty 12. Feb 2003 00:23

Kein Problem :) Dafür bekomme ich ne Free Exemplar Deines Spiel ;)

flodeluxe 12. Feb 2003 14:28

Ja, :mrgreen: du wirst der Erste sein der es erhällt, ich will es hier im Forum unter FREEWARE posten! Vielleicht noch drei / vier Tage, mal sehen...

Darty 12. Feb 2003 18:47

:angle2: Was wird es eigentlich ?? Ne 3D Shooter :mrgreen:

oki 12. Feb 2003 19:54

Ich hoffe, ich bringe jetzt nicht was durcheinander, aber mit Create auf TIniFile und gleichen Namen wird die vorhandene Datei geöffnet. Eine Suche ist nicht nötig. Wenn noch keine Datei vorhanden ist wird eine neue erstellt. Brauchst Du Voreinstellungswerte für Deine Variablen prüfen die Read-Methoden des TIniFile-Objektes (ReadString, ReadInteger....) ob der Eintrag vorhanden ist, wenn nicht wird der in der Methode angegebene Wert verwendet.
Bsp.:
Delphi-Quellcode:
 MyVar := ini.ReadString('Section', 'Variable', Voreinstellungswert);
Die ini wird bei reiner Namensangabe 'meine.ini' immer in das Windows-Verzeichnis gespeichert.

Gruß

oki

flodeluxe 13. Feb 2003 14:29

Ich hab noch mal eine Frage, wie überprüfe ich ob eine Eintrag noch nicht vorhanden ist? mit NOT? Ich verzweifle noch mit den INI's :mrgreen:

janjan 13. Feb 2003 14:33

Ganz einfach, hier mal die Beschreibung zu ReadString aus der Hilfe:

Delphi-Quellcode:
Beschreibung

ReadString liest einen String-Wert aus einer INI-Datei. Der String Section bezeichnet den Abschnitt, der den zum Wert gehörigen Schlüssel enthält. Der String Ident ist der Name des Schlüssels mit dem Wert. Der Wert Default legt fest, welcher String in folgenden Situationen zurückgeliefert werden soll:

Der Abschnitt ist nicht vorhanden.
   Der Schlüssel existiert nicht.
   Dem Schlüssel ist kein Datenwert zugeordnet.

Diese Version von ReadString steht nur für Anwendungen zur Verfügung, die für Windows compiliert wurden. Unter Linux wird ReadString von TMemIniFile vererbt.
machs einfach so, wenn MyVar den Wert 'Fehler' hat, dan weißt du das was schiefgelaufen ist.

Delphi-Quellcode:
MyVar := ini.ReadString('Section', 'Variable', 'Fehler');

oki 13. Feb 2003 15:04

janjan hats auf den Punkt gebracht.

Auch wenn man es nicht glauben mag, es gibt auch noch Dinge um die man sich nicht kümmern muß weil sie schon da sind.

Gruß oki

nailor 13. Feb 2003 16:42

Zitat:

Zitat von flodeluxe
Ich hab noch mal eine Frage, wie überprüfe ich ob eine Eintrag noch nicht vorhanden ist? mit NOT? Ich verzweifle noch mit den INI's :mrgreen:

Du kannst entweder mit Standard-Werten arbeiten, oder mit ValueExists bzw SectionExists.

flodeluxe 14. Feb 2003 16:38

Hi
Ok ich werde es mal so porbieren, aber ich hasse inzwischen alle Arten von Ini's :mrgreen: :mrgreen:

@ M.KNEBEL: Es wird ein kleines Spiel, wie bei der Sat1 Show, ein Superball-Clon :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 Uhr.

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