![]() |
IniFile wird nicht erstellt!
Hallo zusammen,
bei mir wird kein IniFile erstellt und ich hab nach einigem Suchen keine Lösung gefunden. Kann mir hier weiter geholfen werden? Um einen IniFile zu erstellen benutze ich folgenden Code:
Delphi-Quellcode:
Die Variable "Ini" als eine globbale Variable zu deklarieren hat auch nicht geklappt.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var Ini: TIniFile; begin Ini:= TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini')); try Ini.WriteString( 'VideoSaveDir', 'VideoSaveDir', VideoSaveDir); Ini.WriteString('Zwischenspeicher', 'Zwischenspeicher', Zwischenspeicher); Ini.WriteString('Arbeitsverzeichnis', 'Arbeitsverzeichnis', Arbeitsverzeichnis); Ini.UpdateFile; finally end; Ini.Free; VideoFilelist.Free; Videopuffer:= nil; VideoInfo:= nil; end; // Hab's dann so versucht: Ini:= TIniFile.Create('C:\DasVerzeichnis\Meine.ini'); // Aber auch hier passiert nichzs - keine *.ini Weis jemand Rat, bin nach 4 Stunden erfolglosem Suchen, lesen und probieren recht entnervt :roll: Auf dem PC bin ich der Chefe, also fehlende Rechte können es nicht sein, klappt ja mit Textfiles und anderen auch (XP-Delphi2009). Danke schon mal und noch einen ruhigen Abend. |
Re: IniFile wird nicht erstellt!
Welches Betriebssystem? Und warum ist das Ini.Free; nicht im finally-Block wo es hingehört?
Deine Sektionen heißen genauso wie die Schlüssel, das finde ich etwas ungewöhnlich. Eventuell liegt das Problem darin begründet. |
Re: IniFile wird nicht erstellt!
Schalt sonst mal die Debug DCUs an und setze einen Haltepunkt auf die FormClose Routine (wird sie überhaupt aufgerufen?)
Viele Grüße |
Re: IniFile wird nicht erstellt!
Zitat:
|
Re: IniFile wird nicht erstellt!
Hallo,
Delphi-Quellcode:
Inis gehören nichts ins Exe-Verzeichnis.
Ini:= TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
Dort besteht unter deinem XP in der Regel kein Schreibrecht, ab Vista geht das gar nicht mehr (jaja, stimmt nicht ganz)
Delphi-Quellcode:
Hast du in C:\DasVerzeichnis Schreibrecht ?
Ini:= TIniFile.Create('C:\DasVerzeichnis\Meine.ini');
Existiert das Verzeichnis überhaupt. Hast du nach dem Create auch etwas in die Ini reingeschrieben ? Ini.Free vergessen ? Heiko |
Re: IniFile wird nicht erstellt!
Besser mit
![]() |
Re: IniFile wird nicht erstellt!
Zitat:
|
Re: IniFile wird nicht erstellt!
Zitat:
Teste es eventuell ohne Ini.UpdateFile, aber das sollte es auch nicht sein. Unter Win NT ff hat UpdateFile sowieso keine Bedeutung. Das einzige was sein kann, sind tatsächlich Schreibrechte in dem Ordner. Benutzt du eventuell Vista? Bei Vista denkt man oft, daß man Adminrechte hat, hat man aber keine. Das einzige was noch sein könnte, aber das kann man am Code nicht erkennen, ist, daß das Programm hier aussteigt
Delphi-Quellcode:
Wenn aber VideoSaveDir ein String ist, dann gibt es keinen Grund dafür. Denn eine Ini wird erst in dieser Zeile angelegt.
Ini.WriteString( 'VideoSaveDir', 'VideoSaveDir', VideoSaveDir);
|
Re: IniFile wird nicht erstellt!
So etwas würde ich eher in OnCloseQuery ausführen statt in OnClose.
Davon abgesehen: Der Code ist soweit funktionsfähig, auch wenn das Free wie schon gesagt wurde ins finally gehört. Da Delphi ja die Exe in dem Ordner erstellen konnte, die Rechte also kein Problem sind, bleibt nur: Zitat:
Andere Möglichkeit: Das Programm stürzt in OnCloseQuery ab oder wird via Halt oder so abgestürzt, dann wird OnClose natürlich nicht ausgeführt. |
Re: IniFile wird nicht erstellt!
Ein Breakpoint sollte hier Klarheit schaffen.
|
Re: IniFile wird nicht erstellt!
Zitat:
|
Re: IniFile wird nicht erstellt!
Das ist aber nicht besonders aussagefähig, da möglicherweise im OI das Ereignis nicht zugewiesen ist, obwohl die Methode im Source steht ;)
|
Re: IniFile wird nicht erstellt!
Zitat:
Die Definition von OnClose und OnCloseQuery sind eindeutig und somit ist auch das zu benutzende Ereignis eindeutig. Kein Wunder, dass es soviele komische Programme gibt... |
Re: IniFile wird nicht erstellt!
Zitat:
Ich nutze allerdings normalerweise auch OnClose, wenn es keine kritischen Sachen sind, die da ablaufen. Und wenn man beim Dialog ein Nein bekommt und CanClose auf False setzt und trotzdem speichert, dann ist das ja kein Zwang, man kann ja auch nur speichern, wenn das Schließen zugelassen wird... // EDIT: Ach ja: ganz andere Idee noch: Wenn es sich hier nicht um das Hauptformular handelt, dann wird beim Schließen des Programms das OnClose oder OnCloseQuery gar nicht ausgeführt! |
Re: IniFile wird nicht erstellt!
Zitat:
Und mit dem abwürgen beim OnClose: man sollte dort nicht anfangen noch grossartig langwierige Dinge zu erledigen. Aber bei einem abwürgen durch den Benutzer gibt es eh keine sicheren Datenbestände, dass ist dem Nutzer bei solchen Aktionen wohl klar, sonst würde er nicht anfangen "Programm trotzdem schließen", etc. Windows weist ihn genau auf diese Gefahren hin... |
Re: IniFile wird nicht erstellt!
Wenn aber der Rechner (automatisch) runtergefahren wird, dann wird zwar eine Abfrage in OnCloseQuery berücksichtigt, aber nur paar Sekunden. Dann wird das Programm abgeschossen. Ohne Abfrage würde alles gespeichert.
Also Wenns gibt es jede Menge. Letztendlich muß man selbst entscheiden was besser für einen ist. |
Re: IniFile wird nicht erstellt!
Ich glaube, ihr diskutiert gerade am Problem vorbei.
|
Re: IniFile wird nicht erstellt!
Versuch mal ParamStr(0) statt Application.ExeName
|
Re: IniFile wird nicht erstellt!
Das ist das Gleiche. Das Eine ist das Result des Anderen.
|
Re: IniFile wird nicht erstellt!
Vielleicht ist es nicht ganz durchgekommen, aber ist das Ereignis auch zugewiesen?
|
Re: IniFile wird nicht erstellt!
|
Re: IniFile wird nicht erstellt!
Ja eben, da fange ich doch beim Naheliegendsten an :stupid:
|
Re: IniFile wird nicht erstellt!
Zitat:
Das BS ist XP-Pro + Delphi09, steht aber auch oben drinne, lies mal genauer :roll: Die Namen der Sektionen und Schlüssel spielen keine Rolle, es kommt nur auf die Variablen an. S.U. Danke :lol: |
Re: IniFile wird nicht erstellt!
Zitat:
|
Re: IniFile wird nicht erstellt!
Ab Delphi 2009 scheint das "OnClose"-Event nur noch das ausschließliche "Beenden" -> "Application.Terminate" zu beinhalten.
Das "OnCloseQuery" berücksichtigt anscheinend viele ButtonClicks. :lol: Seitdem ich ein par Anweisungen dem "OnCloseQuery" übergebe, klappt es ohne Fehlermeldung :hello: |
Re: IniFile wird nicht erstellt!
Zitat:
|
Re: IniFile wird nicht erstellt!
Zitat:
|
Re: IniFile wird nicht erstellt!
Zitat:
Aber davon mal abgesehen, denke ich nicht, dass sich Delphi2009 anders verhält als Vorgängerversionen, denn wenn das so wäre, wäre dies ein Albtraum bei der Portierung von Projekten auf Delphi2009. Und irgendwie gefälltt mir dein Ton nicht, in dem du mit mir redest. Ich wollte nur helfen und dann werde ich von dir so abgekanzelt. Was soll das? Hier zum Beispiel: Zitat:
|
Re: IniFile wird nicht erstellt!
Zitat:
2) Und das mit den Sections habe ich ausprobiert, das Programm nimmt beim starten nur die gewünschten Variablen, egal wie die Sectionen benannt werden. 3) Habe mich vertan, :oops: ich meinte nicht die "OnCloseQuery-Routine" es ist die ComboBox "OnDestroy". Da finde ich alle ButtonClicks wieder und der übergebe ich auch die "WriteIni-procedure". Da wird sie jedenfalls geschrieben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 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