ich hab ernste Probleme mit dem Schreiben in eine INI Datei.
Die EXE aus der IDE aufgerufen bringt in 9 von 10 Fällen 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;