![]() |
AW: Fehlermeldung bei Schreiben nach CSIDL_APPDATA
Zitat:
![]() Wenn mehrere Units einen initialization Abschnitt haben entscheidet die Reihenfolge in der uses-Klausel darüber wann welcher initialization Abschnitt ausgeführt wird. Grüße Klaus |
AW: Fehlermeldung bei Schreiben nach CSIDL_APPDATA
vorübergehend habe ich es jetzt erst mal so geändert:
Delphi-Quellcode:
implementation
var inUseReadFileName: string=''; inUseWriteFileName: string=''; function TStrIniFile.isFileReadyForRW: boolean; var r,w: boolean; begin RESULT:=true; r:=UpperCase(FileName)=UpperCase(inUseReadFileName); w:=UpperCase(FileName)=UpperCase(inUseWriteFileName); if (r or w) then begin repeat RESULT:=false; until ((inUseReadFileName='') and (inUseWriteFileName='')); RESULT:=true; end; end; function TStrIniFile.LoadFile : boolean; var f: TextFile; u: string; errorCode: Integer; begin RESULT:=false; if IniFileExists then begin if isFileReadyForRW then <-- begin AssignFile(f,FileName); {$I-} Reset(f); {$I+} errorCode:= IOResult; if errorCode=0 then begin RESULT:=true; inUseReadFileName:=FileName; <-- while not eof(f) do begin readln(f,u); if isIniRow(u) then addItem(u); end; closeFile(f); end; if not RESULT then MessageDlg(application.ExeName+': '+FileName+' ['+sysErrorMessage(errorCode)+'].',mtWarning,[mbOk],0); end; end; inUseReadFileName:=''; <-- end; function TStrIniFile.SaveFile : boolean; var f: TextFile; i, errorCode: Integer; begin RESULT:=false; if FileName<>'' then begin if isFileReadyForRW then <-- begin AssignFile(f,FileName); {$I-} Rewrite(f); {$I+} errorCode:= IOResult; if errorCode=0 then begin RESULT:=true; inUseWriteFileName:=FileName; <-- for i:=0 to Count-1 do begin if i>0 then if posIS[i]<0 then writeln(f); writeln(f,item[i]); end; closeFile(f); end; if not RESULT then MessageDlg(application.ExeName+': '+FileName+' ['+sysErrorMessage(errorCode)+'].',mtWarning,[mbOk],0); end; end; inUseWriteFileName:=''; <-- end; |
AW: Fehlermeldung bei Schreiben nach CSIDL_APPDATA
besser ist das:
Delphi-Quellcode:
function TStrIniFile.isFileReadyForRW: boolean;
begin if UpperCase(FileName)=UpperCase(inUseReadFileName) then begin repeat until inUseReadFileName=''; end; if UpperCase(FileName)=UpperCase(inUseWriteFileName) then begin repeat until inUseWriteFileName=''; end; RESULT:=true; end; |
AW: Fehlermeldung bei Schreiben nach CSIDL_APPDATA
Zitat:
Auf alle Fälle erst mal ein kräftiges Dankeschön für deinen Support, auch an Philip.:thumb: Jetzt habe ich gesehen, daß mache Programme gleichzeitig gestartet werden und im OnShow Ereignis erst mal kräftig iniDateien lesen, und zwar die selben. Da bleibt wohl nur diese Variante.
Delphi-Quellcode:
procedure Wait (var N: integer);
var fTime: Cardinal; begin fTime:=GetTickCount; repeat until (GetTickCount-fTime) > 500; N:=N+1; end; function TStrIniFile.TryOpenFile (var f: TextFile; const fWrite: boolean): boolean; var N,IO: integer; begin N:=0; AssignFile(f,FileName); if not fWrite then begin Repeat {$I-} Reset(f); {$I+} IO:=IOResult; if IO<>0 then Wait(N); Until ((IO=0) or (N=10)); end else begin Repeat {$I-} Rewrite(f); {$I+} IO:=IOResult; if IO<>0 then Wait(N); Until ((IO=0) or (N=10)); end; RESULT:=(IO=0); if not RESULT then MessageDlg(Application.ExeName+': '+FileName+' ['+SysErrorMessage(IO)+'].',mtWarning,[mbOk],0); end; |
AW: Fehlermeldung bei Schreiben nach CSIDL_APPDATA
Vielleicht wäre die Verwendung von z.B.
![]() |
AW: Fehlermeldung bei Schreiben nach CSIDL_APPDATA
Könnte man beim AssignFile und Co. auch ...
![]() aber mal was Aktuelleres/OOPmäßigeres kann ja nicht schaden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:27 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