![]() |
EInifileException Fehler beim Schreiben der Inidatei
Hallo,
ich nutze schon seit einigen Jahren Ini-Dateien in meinem Programm, um die aktuellen Einstellungen (Fensterposition etc.) zu speichern. Seit ungefähr einer Woche bekomme ich beim Beenden des Programms einen Fehler, wenn die Ini-Datei geschrieben werden soll. Nachfolgender Codeauszug soll das Problem verdeutlichen:
Code:
Ich würde die Exception verstehen, wenn sie bei einem ungültigen Dateinamen aufträte. Der Fehler tritt aber zufällig bei einem der Schreibvorgänge auf (WriteInteger, WriteString), manchmal auch gar nicht.
var
Ini : TInifile; begin Ini := TInifile.Create(Inifilename); // Inifilename enthält einen definitiv gültigen Dateinamen Ini.WriteInteger('Form', 'Left', Left); Ini.WriteInteger('Form', 'Top', Top); Ini.WriteInteger('Form', 'Width', Width); Ini.WriteString('Form', 'Irgendwas', FIrgendwas); Ini.Free; end; Es scheint unabhängig von der Delphi-Version zu sein (getestet mit 2006 und XE), und es passiert bisher nur auf meinem Rechner (XP), hauptsächlich beim Testen aus der Entwicklungsumgebung heraus. Gibt es andere, die ähnliche Probleme haben? Hat jemand eine Idee für einen Lösungsansatz? Die anderen Threads haben mir leider nicht wirklich geholfen. Einen doppelten Zugriff schließe ich mal aus. Die Ini-Datei sollte das doch an sich schon verhindern, oder? Grüße freedy |
AW: EInifileException Fehler beim Schreiben der Inidatei
Wenn ich im VCL-Quelltext nach EIniFileException suche, finde ich zwei Stellen, wo eine EIniFileException geworfen wird. Auf diese Zeilen würde ich je einen Haltepunkt setzen und, wenn dort angehalten wird, GetLastError anschauen (z.B.
Delphi-Quellcode:
im Auswerten/Ändern-Fenster (Strg-F7) eingeben).
SysErrorMessage(GetLastError)
HTH, Uli. |
AW: EInifileException Fehler beim Schreiben der Inidatei
@uligerhardt: Wenn er die VCL debuggen will, dann muss er auch noch die Debug DCUs in den Projektoptionen unter dem Punkt Compilieren anschalten.
Des weiteren ist der Fehler auf ein Problem mit ![]() Zitat:
|
AW: EInifileException Fehler beim Schreiben der Inidatei
Zitat:
|
AW: EInifileException Fehler beim Schreiben der Inidatei
Hatte das problem auch sehr oft allerdings unter Win7
Nachdem ich die Ini Dateien unter USER/..Roaming abgelegt habe hat sich das gegeben. gruss |
AW: EInifileException Fehler beim Schreiben der Inidatei
|
AW: EInifileException Fehler beim Schreiben der Inidatei
Bei
Delphi-Quellcode:
kann definitiv niemals ein solcher Fehler aufteten.
Ini := TInifile.Create(Inifilename); // Inifilename enthält einen definitiv gültigen Dateinamen
(außer bei OutOfMemory ... also nichtmal mehr 8 Byte frei oder z.B. bei vorherrigen Speicherfehlern) Wenn aber z.B. gleichzeitig ini.Write..., ini.Read... oder Dergleichen gleichzeitig auf die selbe Datei gehen, dann kann es schonmal knallen. Genauso wenn keine Zugriffsrechte bestehen oder etwas Anderes den Zugriff blockt. |
AW: EInifileException Fehler beim Schreiben der Inidatei
Es wäre vielleicht günstig gewesen, die Art der Exception zu nennen.
|
AW: EInifileException Fehler beim Schreiben der Inidatei
Zitat:
|
AW: EInifileException Fehler beim Schreiben der Inidatei
Jetzt, wo Du es sagst :oops:
|
AW: EInifileException Fehler beim Schreiben der Inidatei
TIniFile/ TMemIniFile benötigen die Datei exklusiv. Diese wird vermutlich aber von einem anderen Prozess benutzt.
Delphi-Quellcode:
procedure Wait (var N: integer);
var fTime: Cardinal; begin fTime:= GetTickCount; repeat until (GetTickCount-fTime) > 500; N:= N+1; end; function IsFileReadyForOpen (const FileName: string): boolean; var N, IO: integer; F: TextFile; begin N:= 0; AssignFile(F, FileName); repeat {$I-} Reset(f); {$I+} IO:= IOResult; if IO <> 0 then Wait(N); until ((IO = 0) or (N = 10)); Result:= (IO = 0); if Result then closeFile(f) else MessageDlg(Application.ExeName+': '+FileName+' ['+SysErrorMessage(IO)+'].', mtWarning, [mbOK], 0); end; var Ini : TInifile; begin if not IsFileReadyForOpen (Inifilename) then Exit; |
AW: EInifileException Fehler beim Schreiben der Inidatei
Wie schon erwähnt wurde ruft WriteString auch nur WritePrivateProfileString auf. Im MSDN findet sich dann Folgendes dazu:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 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