Fehler beim Schreiben in INI Datei

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Fehler beim Schreiben in INI Datei

Beitrag von charlytango »

Hi,

ich hab ernste Probleme mit dem Schreiben in eine INI Datei.
Die EXE aus der IDE aufgerufen bringt in 9 von 10 Fällen
Screenshot 2021-04-28 101201.png
Screenshot 2021-04-28 101201.png (7.2 KiB) 2047 mal betrachtet
Scheinbar wird angenommen dass die Datei von irgendeinem Programm gesperrt ist -- wird aber höchstens im Explorer angezeigt. Und auch ganz ohne Explorer kommt der Schreibfehler.

Die EXE direkt aufgerufen hab ich jetzt 5 mal getestet, da ging es jedesmal.

Code hab ich beigelegt, aber ich bezweifle dass es an dem liegt.
FoSettings.TSettingsTable ist ein TBufDataset
Win 10/64

Code: Alles auswählen

function TSettingsReadWrite_INI.WriteToIni: boolean;
var
  MyIni:TIniFile;
  oSections:TStringlist;
  iCounter:integer;

  bFound:boolean;
  Options:TLocateOptions;
  sSection:string;  //Sectionname
  sBackupFile:string;

begin

  iCounter:=0;

  if not assigned(FoSettings) then
    raise Exception.Create('File: ' + {$INCLUDE %FILE%} + LineEnding +
                           'Methodname: ' +  {$I %CURRENTROUTINE%} + LineEnding +
                           'Linenumber: ' + {$INCLUDE %LINE%} + LineEnding +
                           '__ FoSettings ist nicht initialisiert');

  if FileExists(FsIniFileName) then
  begin

    if MessageDlg('Frage', 'Die Datei '+FsIniFileName+ ' existiert --- Überschreiben?', mtConfirmation,
     [mbYes, mbNo],0) = mrYes
    then begin
      sBackupFile := FsIniFileName;
      if not CreateBackupFile(sBackupFile) then
         raise Exception.Create('File: ' + {$INCLUDE %FILE%} + LineEnding +
                       'Methodname: ' +  {$I %CURRENTROUTINE%} + LineEnding +
                       'Linenumber: ' + {$INCLUDE %LINE%} + LineEnding +
                       ' Es konnte kein Backup der Datei '+FsIniFileName+' erstellt werden');

      if not DeleteFile(FsIniFileName) then
         raise Exception.Create('File: ' + {$INCLUDE %FILE%} + LineEnding +
                       'Methodname: ' +  {$I %CURRENTROUTINE%} + LineEnding +
                       'Linenumber: ' + {$INCLUDE %LINE%} + LineEnding +
                       ' Datei '+FsIniFileName+' kann nicht gelöscht werden');
    end
    else
      exit;
  end;

  MyIni := TIniFile.Create(FsIniFileName);
  FoSettings.TSettingsTable.DisableControls;

    FoSettings.TSettingsTable.First;
  while not FoSettings.TSettingsTable.EOF do begin
    inc(iCounter);
    {Nach folgendem Muster wird einiges in die INI Datei geschrieben
	hier nur exemplarisch }
    MyIni.WriteString(sSection, 'section', sSection);
    MyIni.WriteString(sSection, 'name', FoSettings.TSettingsTable.FieldByName('name').AsString);
    MyIni.WriteInteger(sSection, 'primid', iPrimID);
    MyIni.WriteInteger(sSection, 'parentid', FoSettings.TSettingsTable.FieldByName('parentid').AsInteger);
    MyIni.WriteInteger(sSection, 'layoutspacebefore', FoSettings.TSettingsTable.FieldByName('layoutspacebefore').Asinteger);
    MyIni.WriteInteger(sSection, 'layoutspaceafter', FoSettings.TSettingsTable.FieldByName('layoutspaceafter').Asinteger);
    MyIni.WriteInteger(sSection, 'layoutradiocolumns', FoSettings.TSettingsTable.FieldByName('layoutradiocolumns').Asinteger);
    MyIni.WriteString(sSection, 'layoutlabelposition', FoSettings.TSettingsTable.FieldByName('layoutlabelposition').AsString);

    FoSettings.TSettingsTable.Next;
  end;

  FoSettings.TSettingsTable.EnableControls;
  result:=true;
end;

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Fehler beim Schreiben in INI Datei

Beitrag von Winni »

Hi!

Du gibst den IniFile nicht frei.
Es fehlt

Code: Alles auswählen

MyIni.free;
Winni

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Fehler beim Schreiben in INI Datei

Beitrag von charlytango »

Winni hat geschrieben:
Mi 28. Apr 2021, 10:49
Du gibst den IniFile nicht frei.
Du hast völlig recht.
Die Lesefunktion hab ich in einen Try..finally Block gepackt und die Schreibfunktion nicht :oops:

Dreimal getestet, jetzt wird problemlos geschrieben -- verstehe aber nciht warum das so ist, denn bereits der erste Schreibvorgang ging schon schief.
Werde das noch weiter beobachten.
THX

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Fehler beim Schreiben in INI Datei

Beitrag von charlytango »

Winni hat geschrieben:
Mi 28. Apr 2021, 10:49
Es fehlt

Code: Alles auswählen

MyIni.free;
Tja, leider war es das nicht.

Mitten in der Serie von MyIni.Writexxx(....) kommt die Sperrmeldung.
Das kann irgendwie nicht an meinem Code liegen. grübel.

Und das Verhalten ist auch ohne IDE gleich -- es kracht

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Fehler beim Schreiben in INI Datei

Beitrag von sstvmaster »

Ja das liegt doch an Dropbox, weil Dropbox versucht sich mit der Cloud zu synchronisieren.

Verleg mal testweise dein Projekt auf c:\test zb. und probiere.
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Fehler beim Schreiben in INI Datei

Beitrag von af0815 »

Dropbox und Konsorten, aber auch ein AV Scanner blockiert gerne mal eine Datei
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Fehler beim Schreiben in INI Datei

Beitrag von charlytango »

Plausible Erklärung, danke, das teste ich mal

Antworten