Die folgende Routine ist Bestandteil eines iniFile Parsers. SaveFile ist gelegentlich (!?) false. Ich suche schon seit Wochen, in den Apps kann ich jedoch keine Fehler entdecken. Dateien vom Typ TStrIniFile werden procdure intern vereinbart, erzeugt und freigegegen. Bei free wird ggf. SaveToFile aufgerufen. Ich bin mir sicher, daß innerhalb von TStrInfile kein Fehler ist.
Delphi-Quellcode:
function TStrIniFile.SaveFile : boolean;
var
f: TextFile;
i: integer;
begin
RESULT:=false;
AssignFile(f,FileName);
{$I-} Rewrite(f); {$I+}
if IoResult=0 then
begin
RESULT:=true;
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;
sleep(10);
*** if not RESULT then ***
MessageDlg(application.ExeName+': '+FileName+' is not ready for WRITE.',mtWarning,[mbOk],0);
end;
procedure TStrIniFile.UpdateFile;
begin
if FileName<>'' then
begin
SaveFile;
IniFileChanged:=false;
end;
end;
destructor TStrIniFile.Destroy;
begin
if IniFileChanged then UpdateFile;
inherited;
end;
Das Verzeichnis der Dateien ist:
verzA:=VerzMitSlash(trim(GetShellFolderPath(CSIDL_APPDATA)))+'Abel\';
Ein Hauptmenu wird mit einem {$R Adminrechte.res} gestartet und ruft die verschiedenen Apps so auf:
Delphi-Quellcode:
rocedure TForm101.ExecuteWinFileAndWait(Prozess: String);
var SI: TStartupInfo;
PI: TProcessInformation;
begin
screen.cursor:=crAppStart;
FillChar(SI, SizeOf(SI), 0);
SI.cb:= SizeOf(SI);
SI.wShowWindow:= SW_SHOWNORMAL;
if not CreateProcess(nil,PChar(Prozess),nil,nil,false,NORMAL_PRIORITY_CLASS,nil,PChar(VerzE),SI,PI) then
begin
messagedlg('... kann den Prozess nicht ausführen.',mterror,[mbok],0);
EscDateiAnlegen;
end
else
Begin
WaitForSingleObject(PI.hProcess,INFINITE);
End;
screen.cursor:=crdefault;
end;
Woran könnte das liegen, daß es ab und zu nicht geht? Alle Ideen sind willkommen. // D2007