Würd‘ ich nich' machen, UpdateFile produziert ja hier die
Exception. TMemInfIle arbeitet intern mit einer StringList. WriteString fügt den Wert nur in diese Stringliste ein. Erst bei UpdateFile erfolgt ein List.SaveToFile. TMemIniFile.WriteString kann im Gegensatz zu IniFiles keinen IO-Fehler produzieren.
Vielleicht so? (ungetestet):
Delphi-Quellcode:
function CanUseIniFile(const Filename: string): boolean;
procedure Wait200;
var
ATime: Cardinal;
begin
ATime := GetTickCount;
repeat
until GetTickCount - ATime > 200;
Application.ProcessMessages;
end;
var
N, IO: integer;
F: TextFile;
begin
Result := true;
if (FileName <> '') and FileExists(FileName) then
begin
AssignFile(F, FileName);
N := 0;
repeat
{$I-} Reset(F); {$I+}
IO := IOResult;
if IO <> 0 then
begin
Wait200;
Inc(N);
end;
until (IO = 0) or (N = 20);
Result := (IO = 0);
if not Result then
MessageDlg(SysErrorMessage(IO), mtWarning, [mbOK], 0)
else
CloseFile(F);
end;
end;
Edit: Muß 2 mal geprüft werden
Delphi-Quellcode:
if CanUseIniFile(sPath + 'my.ini') then
begin
myIni := TMemIniFile.Create(sPath + 'my.ini');
try
myIni.WriteString('DATA', 'SWITCHRESOLUTION', s);
if CanUseIniFile(sPath + 'my.ini') then
myIni.UpdateFile;
finally
MyIni.Free;
end;
end;