Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem mit ini dateien (https://www.delphipraxis.net/80307-problem-mit-ini-dateien.html)

guitar1 6. Nov 2006 21:52


Problem mit ini dateien
 
hi,

ich probier jetzt schon seit stunden alles mögliche (ist bei mir noch nicht so viel :) ), um daten in eine ini-datei zu speicher.
Ich hab hier mal einen teil des quellcodes reingestellt, vllt ist es ja auch nur ein ganz kleiner fehler
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var prodl : TIniFile;
begin

prodl := tinifile.Create('produktliste.ini');

  prodl.WriteString ('cpu', 'name', cpu_amd_name[1] );



prodl.Free;
end;


procedure TForm1.FormShow(Sender: TObject);
var prodl : TIniFile;
begin
  try
    prodl.Create('produktliste.ini');
      cpu_amd_name[1]:= prodl.ReadString('cpu','name','Fehler!');
  finally
    prodl.Free
  end;


end;
mein "hauptproblem" ist es, dass mich delphi, wenn ich das compilieren will mit fehlermeldungen wie zB:
Zitat:

1. Meldung:
Zugriffsverletzung bei Adresse 0040383A in Modul 'Project1.exe'. Lesen von Adresse FFFFFF00.
2. Meldung:
Exception EAccessViolation in Modul Project1.exe bei 00000000. Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000.
3. Meldung:
Exception EAccessViolation in Modul Project1.exe bei 00003AFC. Zugriffsverletzung bei Adresse 00403AFC in Modul 'Project1.exe'. Lesen von Adresse 646F7238.
4. Meldung:
Runtime error 216 at 0045A1AC
bombadiert

schon mal großes DANKE im voraus mfg A. Horn

PS: ich würde ich freuen wenn ihr es einfach erklärt, denn wie gesagt arbeite ich noch nicht so lange mit Delphi (ca. 3 monate)

Edit1: hab die fehlermeldungen vergessen :oops:
Edit2: tippfehler^^

Muetze1 6. Nov 2006 21:58

Re: Problem mit ini dateien
 
Vergleich mal den Aufruf des Constructors (Create) bei den beiden Funktionen die du gepostet hast.

PS: Die Meldungen erscheinen zur Laufzeit, nicht beim compilieren!

gordon freeman 6. Nov 2006 21:59

Re: Problem mit ini dateien
 
Mach mal statt
Zitat:

Zitat von guitar1
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var prodl : TIniFile;
begin
  try
    prodl.Create('produktliste.ini'); //Hier der Fehler
      cpu_amd_name[1]:= prodl.ReadString('cpu','name','Fehler!');
  finally
    prodl.Free
  end;

einfach
Delphi-Quellcode:
prodl := TIniFile.Create('produktliste.ini');
Mach ich auch ständig noch falsch.

PS: Da war KEIN roter Kasten, ehrlich!

Luckie 6. Nov 2006 22:01

Re: Problem mit ini dateien
 
Eine gescheite Codeformatierung ist die halbe Miete:
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  prodl : TIniFile;
begin
  prodl := TIniFile.Create('produktliste.ini');
  try
    try
      prodl.WriteString ('cpu', 'name', cpu_amd_name[1] );
    except
      on E: Exception do
        ShowMessage(E.Message);
    end;
  finally
    prodl.Free;
  end;
end;
Das mal exemplarisch. Ansonsten sollte dein Code auch schon funktionieren, wenn denn dein Windows in der Lage ist und errät in welchem Verzeichnis, sich die Ini-Datei befindet. Ich gehe mal davon aus, sie soll im Anwendungsverzeichnis liegen. Dann sollte das so aussehen:
Delphi-Quellcode:
prodl := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'produktliste.ini');

Hansa 7. Nov 2006 11:37

Re: Problem mit ini dateien
 
Woriin besteht der Unterschied zwischen dem :

Delphi-Quellcode:
prodl := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'produktliste.ini');
und dem :
Delphi-Quellcode:
prodl := TIniFile.Create('produktliste.ini');
:gruebel:

Matze 7. Nov 2006 11:40

Re: Problem mit ini dateien
 
Zitat:

Zitat von Hansa
Woriin besteht der Unterschied zwischen dem

Zweites legt die datei im Arbeitspfad an, der beispielsweise über den TOpenDialog oder auch über Delphi-Referenz durchsuchenChDir (ich glaube so heißt diese Funktion) geändert werden kann.

Interceptor 7. Nov 2006 11:43

Re: Problem mit ini dateien
 
Beim oberen wird ein absoluter Pfad angegeben, beim unteren ein relativer :stupid:

mkinzler 7. Nov 2006 11:48

Re: Problem mit ini dateien
 
Im Normalfall hat das den geliechen Effekt, da das Arbeitsverzeichnis mit dem Verzeichnis der Exe identisch ist. Wenn nun aber das Arbeitsverzeichnis abweicht (Exe ist mit Dateityp verknüpft, Angabe in Verknüpfung usw) dann nicht mehr. Deshalb ist erstere Lösung besser.

Zitat:

Beim oberen wird ein absoluter Pfad angegeben, beim unteren ein relativer Stupid
Jein es sind eigentlich beide relative Pfade, der erste zum Verzeichnis, in dem die Exeligt und der 2te relative zum Arbeitsverzeichnis.

Hansa 7. Nov 2006 11:49

Re: Problem mit ini dateien
 
Nene. :zwinker: ChDir ist CD und das steht bereits seit Dos für "change directory". Relativ sind beide verwendeten Dateinamen und zwar zum aufrufenden Programm. Dateiname mit absoluter Pfadangabe wäre das : "C:\Windows\Text.ini" :stupid:

Matze 7. Nov 2006 11:54

Re: Problem mit ini dateien
 
Zitat:

Zitat von Hansa
ChDir ist CD und das steht bereits seit Dos für "change directory". Relativ sind beide verwendeten Dateinamen und zwar zum aufrufenden Programm.

Das stimmt nicht, wie mkinzler oder ich schon geschrieben haben. Dazu auch ein Zitat aus der OH:

Delphi-Hilfe:
Syntax
[Delphi] procedure ChDir(const S: string); overload;
[Delphi] procedure ChDir(P: PAnsiChar); overload;

Mit ChDir kann das aktuelle Verzeichnis in den mit S oder P angegebenen Pfad geändert werden. Wenn die Operation fehlschlägt, wird EInOutError ausgelöst.


Oder bin ich da völlig auf dem Holzweg? :gruebel: Aber ich meine schon, dass dies so sei.

Hansa 7. Nov 2006 12:05

Re: Problem mit ini dateien
 
Geh mal ins Dos, also Eingabeaufforderung. Du wirst wohl irgendwo bei \windows\dokumente und einstellungen stehen. Dann gib 2,3 mal CD .. (oder ausgeschrieben ChDir ..) ein und gucke. :mrgreen: Den Befehl gibts 1:1 umgesetzt auch in Delphi.

Habe jetzt mal im Programm geguckt. Bei mir steht auch drin : ParamStr usw. Wäre vielleicht einer so nett und überlegt sich ein konkretes Beispiel, wie ich mein Windows, Programm oder sonstwas so verbiegen / falsch starten usw. muß, so daß der Unterschied zu einem Fehler führt ? :shock:

Matze 7. Nov 2006 12:12

Re: Problem mit ini dateien
 
Ich kenne mich mit DOS aus und cd kenne ich auch, wie wohl die meisten hier. :roll: Aber es geht hier nicht um DOS und wie du siehst, gibt es ChDir als Funktion (vllt auch CD(), aber das ist hier Jacke wie Hose).

Luckie 7. Nov 2006 12:22

Re: Problem mit ini dateien
 
Zitat:

Zitat von Hansa
Woriin besteht der Unterschied zwischen dem :

Delphi-Quellcode:
prodl := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'produktliste.ini');
und dem :
Delphi-Quellcode:
prodl := TIniFile.Create('produktliste.ini');

Oben wird ein absoluter Pfad angegeben und unten ein relativer. Und zwar relativ zum aktuellen Verzeichnis, welches nicht zwingend das Programmverzeichnis sein muss. Ich dachte das wäre nach über drei Jahren Delphipraxis langsam klar geworden.

raiguen 7. Nov 2006 12:28

Re: Problem mit ini dateien
 
Zitat:

Zitat von Interceptor
Beim oberen wird ein absoluter Pfad angegeben, beim unteren ein relativer :stupid:

Das sehe ich genauso :!:

Siehe hier:
Zitat:

Ist ein Dateisystem als Baum organisiert, benötigt man eine Methode, den Dateinamen zu spezifizieren:

absoluter Pfadname:
Ausgehend vom Wurzelverzeichnis wird ein Pfadname vergeben, in dem alle Verzeichnisse aufgeführt sind, die zur Datei führen. Der absolute Pfadname ist immer eindeutig.

relativer Pfadname:
Er wird in Verbindung mit dem Konzept des Arbeitsverzeichnis (working directory) oder aktuellen Verzeichnisses verwendet. Der Benutzer kann jederzeit ein beliebiges Verzeichnis zum aktuellen Verzeichnis erklären. In diesem Fall werden alle nicht absolut angegebenen Pfadangaben relativ zu diesem Verzeichnis angegeben.
Damit dürften alle Unklarheiten beseitigt sein :!: :?: :roll:

Muetze1 7. Nov 2006 12:41

Re: Problem mit ini dateien
 
1. Hatte TIniFile nicht sogar die Besonderheit die INI im Windows Ordner anzulegen, wenn nur ein Dateiname ohne Pfadangabe (egal ob relativ oder absolut) angegeben wurde?

2.
Zitat:

Zitat von Hansa
Habe jetzt mal im Programm geguckt. Bei mir steht auch drin : ParamStr usw. Wäre vielleicht einer so nett und überlegt sich ein konkretes Beispiel, wie ich mein Windows, Programm oder sonstwas so verbiegen / falsch starten usw. muß, so daß der Unterschied zu einem Fehler führt ? :shock:

Möglichkeit 1:
Du legst dir eine Verknüpfung auf die EXE deines Programmes an und legst als Arbeitsverzeichnis ein anderes fest.

Möglichkeit 2:
In der Konsole gehst du in das Verzeichnis wo deine EXE liegt. Dann wechselst du auf ein anderes Laufwerk und startest von dort dein Programm mit Laufwerksbuchstabe:EXE Name.

Zitat:

C:\Programme\TestProg\>deineEXE.exe <-- läuft
Zitat:

C:\Programme\TestProg\>d:

D:\Blubb\>c:deineEXE <-- WorkDir: D:\Blubb\, EXE Directory: C:\Programme\TestProg
Möglichkeit 3:
Leg deine EXE in den Suchpfad ab oder füge das EXE Verzeichnis dem Suchpfad hinzu und tippe an einer anderen Stelle einfach den Namen der EXE ein um das Programm zu starten.

Tumm 7. Nov 2006 13:12

Re: Problem mit ini dateien
 
Hi

Lass doch mal den
Delphi-Quellcode:
Free
Konstruktoraufruf weg. Lag bei mir auch schon mal daran

Tumm

Luckie 7. Nov 2006 13:14

Re: Problem mit ini dateien
 
Wo soll er den weglassen?

raiguen 7. Nov 2006 13:29

Re: Problem mit ini dateien
 
Zitat:

Zitat von Tumm
Hi

Lass doch mal den
Delphi-Quellcode:
Free
Konstruktoraufruf weg. Lag bei mir auch schon mal daran

Tumm

Nee, nee :!: Das würd ich auf keinsten!! Wenn
Delphi-Quellcode:
   prodl := TIniFile.Create('produktliste.ini');
dann auch zum Schluss (also nachdem alles in die INI geschrieben wurde bzw aus derselbigen gelesen wurde) auf jeden Fall
Delphi-Quellcode:
  prodl.Free;
Zitat:

Zitat von Muetze1
1. Hatte TIniFile nicht sogar die Besonderheit die INI im Windows Ordner anzulegen, wenn nur ein Dateiname ohne Pfadangabe (egal ob relativ oder absolut) angegeben wurde?

Nö! Nicht das ich wüsste :gruebel: Wird kein Pfad angegeben, so wird die INI-Datei in der Regel im gleichen Verzeichnis wie die EXE angelegt, es sei denn, man hat das aktuelle Arbeitsverzeichnis mit ChDir gewechselt...

:gruebel: Ist eigentlich die Ausgangsfrage bzw das Problem nun gelöst oder etwa doch? :gruebel:

Luckie 7. Nov 2006 13:33

Re: Problem mit ini dateien
 
Zitat:

Zitat von raiguen
Wird kein Pfad angegeben, so wird die INI-Datei in der Regel im gleichen Verzeichnis wie die EXE angelegt, es sei denn, man hat das aktuelle Arbeitsverzeichnis mit ChDir gewechselt...

Sag es doch klar und deutlich in einem Satz: "Wird kein Pfad angegeben, so wird die INI-Datei in der Regel im Arbeitsverzeichnis angelegt."

Christian Seehase 7. Nov 2006 13:40

Re: Problem mit ini dateien
 
Moin Rainer,

Zitat:

Zitat von raiguen
Wird kein Pfad angegeben, so wird die INI-Datei in der Regel im gleichen Verzeichnis wie die EXE angelegt

Nein, wenn die Datei wird dann im Windows-Verzeichnis angelegt:
Voraussetzung: Die Datei existiert dort noch nicht, und man schreibt etwas hinein.
Die Write-Methoden von TIniFile nutzen die entsprechenden API-Funktionen (z.B. MSDN-Library durchsuchenWritePrivateProfileString)

[EDIT]
@Luckie:
Zitat:

Zitat von Luckie
Sag es doch klar und deutlich in einem Satz: "Wird kein Pfad angegeben, so wird die INI-Datei in der Regel im Arbeitsverzeichnis angelegt."

Was aber nicht stimmt ;-)
[/EDIT]

Luckie 7. Nov 2006 13:51

Re: Problem mit ini dateien
 
OK, inhaltlich ist er falsch. Aber mir kam es mehr auf die unklare Formulierung an.

raiguen 7. Nov 2006 17:53

Re: Problem mit ini dateien
 
Zitat:

Zitat von Christian Seehase
Moin Rainer,

Zitat:

Zitat von raiguen
Wird kein Pfad angegeben, so wird die INI-Datei in der Regel im gleichen Verzeichnis wie die EXE angelegt

Nein, wenn die Datei wird dann im Windows-Verzeichnis angelegt:
Voraussetzung: Die Datei existiert dort noch nicht, und man schreibt etwas hinein.
Die Write-Methoden von TIniFile nutzen die entsprechenden API-Funktionen (z.B. MSDN-Library durchsuchenWritePrivateProfileString)
...

:wall: :oops: argh, da war ich auf dem verkehrten Dampfer :oops: Bei Ini-Files - egal welche Extension die haben (es muss ja nicht immer .ini sein) - ist deine aussage völlig korrekt @ Christian!
Habe mich durch das Schreiben/Anlegen eines 'normalen' TextFiles in die Irre führen lassen...
Von daher nochmals sorry für meine falsche Aussage :pale:

guitar1 7. Nov 2006 21:42

Re: Problem mit ini dateien
 
also schon mal danke für die antworten, mein project startet jetzt wieder und die ini-datei wird auch angelegt.

Aber eine sache wäre da noch, in der ini-datei steht nich der wert der variable (ein sting), sondern 0.
Woran könnte das denn liegen?

Hansa 7. Nov 2006 22:19

Re: Problem mit ini dateien
 
Wer soll denn darauf irgendwie antworten ? Am Anfang sind ein paar Zeilen zu sehen und jetzt gar nichts mehr. 8) Ist der strukturiertere Source von Luckie wenigstens schon eingebaut ? Egal, ob mit ParamStr usw. oder eben nicht. Nach Änderungen sollte immer der neueste Source gepostet werden, sonst wird das nichts.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:17 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