Einzelnen Beitrag anzeigen

surfer007

Registriert seit: 17. Jan 2010
51 Beiträge
 
Delphi 7 Professional
 
#1

ini file manchmal zerstört

  Alt 27. Feb 2013, 23:44
Delphi-Version: 7
Hallo,

ich benutze eine ini Datei um Einstellungen zu speichern (TMemIni). Das ganze klappt auch soweit. Hier ein Beispiel, ich arbeite mit try/except und try/finally da TMemIni. Da ich schon den Fehler hatte "kann nicht erzeugt werden da von einem anderen Prozess benutzt" noch die FileInUse Abfrage.
Delphi-Quellcode:
procedure TForm1.CheckBoxSwichResolutionClick(Sender: TObject);
var
  s : String;
  myIni : TMemIniFile;
begin
  if bStartMerker then Exit;
  if CheckBoxSwichResolution.Checked then s := 'TRUEelse s := 'FALSE';
  WaitIfIniFileLocked;
  try
    myIni := TMemIniFile.Create(sPath + 'my.ini');
    try
      myIni.WriteString('DATA', 'SWITCHRESOLUTION', s);
      myIni.UpdateFile;
    finally
      MyIni.Free;
    end;
  except
    MyLogAdd('ERROR' + ',' + 'E=22', False);
  end;
end;

function FileInUse(FileName: string): Boolean;
var hFileRes: HFILE;
begin
  Result := false;
  hFileRes := 0;
  if NOT FileExists(FileName) then Exit;
  try
    hFileRes := CreateFile(PChar(FileName),
                                    GENERIC_READ or GENERIC_WRITE or GENERIC_EXECUTE,
                                    0,
                                    nil,
                                    OPEN_EXISTING,
                                    FILE_ATTRIBUTE_NORMAL,
                                    0);
    Result := (hFileRes = INVALID_HANDLE_VALUE);
  finally
    if NOT Result then CloseHandle(hFileRes);
  end;
end;

procedure TForm1.WaitIfIniFileLocked;
var
  i : Integer;
begin
  for i := 1 to 50 do begin
    Application.ProcessMessages;
    try
      if FileInUse(sPath + 'my.ini') then begin
        MyDelay(100);
      end else begin
        Exit;
      end;
    except
      MyLogAdd('Error WaitIfIniFileLocked', False);
    end;
  end;
end;
Nun habe ich einen Kunden bei dem ca. alle 2 Wochen die INI Datei zerschossen ist. D.h. die INI ist normalerweise ca. 30 KB gross, und im Fehlerfall dann nur noch 100 Byte und der Rest an Daten fehlt einfach. Da bei Programmstart die Einstellungen aus der INI geladen werden, gibt es dann natürlich Probleme, da Variablen nicht vorhanden sind. Normalerweise passiert sowas ja nur, wenn z.B. während des Schreibvorganges der Strom ausfällt, dann ist klar das der Rest weg ist.

Irgendwelche Tips zu dem Thema kaputte INI? Warum passiert das "manchmal" (mein Lieblings Wort wenn es um bugs geht).
  Mit Zitat antworten Zitat