Hi James, here are some routines to a load-create/archive cycle using a
temporary TIniFile:

program handle_inifile;

uses Classes, SysUtils, IniFiles,
FileUtil;// In Lazarus you will need the LazUtils package to see the
FileUtil unit

procedure ArchiveIniFileTo(var AIniFile : TIniFile; ADestination : string);
begin
  if Assigned(AIniFile) then begin
    { You may want to implement a method
      to update/invalidate in-memory stuff here }
    //IniFileDescendent.Invalidate;
    AIniFile.UpdateFile; // Flush data to disc

    CopyFile(AIniFile.FileName, ADestination);
    if FileExists(AIniFile.FileName) then begin
      DeleteFile(AIniFile.FileName);
    end;
  end;
end;

function LoadIniFile(AFilename: string) : TIniFile;
begin
  Result := TIniFile.Create(AFilename);
  Result.CacheUpdates := True;
end;

var
  TemporaryIniFile : TIniFile;

begin
  TemporaryIniFile := LoadIniFile('tmp.ini');
  try
    TemporaryIniFile.WriteString('Section', 'Key', 'Value'); // in memory
cached updates
     ArchiveIniFileTo(TemporaryIniFile, 'destination.ini');
  finally
     TemporaryIniFile .Free;
  end;
end.

I use this approach because in-memory manipulation of the ini file is what
I need (with the bonus of being faster and safer).

Best,
Rafael Picanço

On Thu, Jul 31, 2025 at 10:39 AM <fpc-pascal-requ...@lists.freepascal.org>
wrote:

> Send fpc-pascal mailing list submissions to
>         fpc-pascal@lists.freepascal.org
>
> To subscribe or unsubscribe via the World Wide Web, visit
>         https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
> or, via email, send a message with subject or body 'help' to
>         fpc-pascal-requ...@lists.freepascal.org
>
> You can reach the person managing the list at
>         fpc-pascal-ow...@lists.freepascal.org
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of fpc-pascal digest..."
>
>
> Today's Topics:
>
>    1. Re:  TIniFile crash (Michael Van Canneyt)
>    2.  Broken Links on Free Pascal Wiki (Tim Coates)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Wed, 30 Jul 2025 16:25:51 +0200 (CEST)
> From: Michael Van Canneyt <mich...@freepascal.org>
> To: FPC-Pascal users discussions <fpc-pascal@lists.freepascal.org>
> Subject: Re: [fpc-pascal] TIniFile crash
> Message-ID: <1c5e79f3-5698-690b-b7be-7900484ba...@freepascal.org>
> Content-Type: text/plain; charset="utf-8"; Format="flowed"
>
>
>
> On Tue, 29 Jul 2025, James Richters via fpc-pascal wrote:
>
> > I will try just creating a temp file, and once it?s completed delete the
> original file then rename the temp file to the correct name, it?s a good
> idea, and a least I will now that nothing I am doing is trying to access
> the file? because I can generate some random name for the temp file,  but I
> guess it wouldn?t stop something like antivirus from trying to scan it
> before I?m done.   It?s a difficult problem to figure out because it
> happens very rarely, but it does happen enough to be annoying.
> >
> > I put the delete and wait for it to be gone procedure just to make sure
> the file was really gone before trying to create a new one in an attempt to
> solve this issue, and it is well past that part of the code when the crash
> happens, it had already written 19 entries to the new  ini file when it
> crashed, and that?s why I?m confused, the error is about creating the file,
> but it was already created and there were already 19 successful entries to
> it? so what?s it creating at the point of the crash?
> >
> > The thing is that the file that is on the disk after the crash is only a
> partial file, up to the exact line that crashed, so the file must have
> finished the delete and there was no problem creating a new file and
> writing to it.
> >
> > I am having a suspicion that Ini.WriteString is opening the file,
> writing to it then closing it, which makes no sense to me, I would think
> that ini.create would create the file and open it, and it would remain open
> until ini.free..  but the fact that it sometimes gives me this message:
> >
> > EFCreateError: Unable to create file
> "I:\Programming\Gcode\Mill\Location.ini": The process cannot access the
> file because it is being used by another process.
> >  $00603277
> >
> > After writing successfully 19 entries to the ini files seems to indicate
> > that it?s opening and closing the file for each Ini.WriteString and that
> > 1% of the time the OS didn?t finish writing the file before it was being
> > opened again?  I?m just guessing here about what could cause this.
>
> The TIniFile indeed writes to disk after every writeNNN()
>
> There are 2 possibilities to change this behaviour:
>
> - Set CacheUpdates to true, and call UpdateFile when done.
>
> - Use TMemInifile, and call UpdateFile when done.
>    (TMemIniFIle simply sets CacheUpdates to true in its constructor)
>
> This should improve matters.
>
> You can also combine this with the "use temp filename and rename" approach.
>
> Michael.
>
> ------------------------------
>
> Message: 2
> Date: Thu, 31 Jul 2025 17:50:57 +1000
> From: Tim Coates <timcoates.soluti...@gmail.com>
> To: FPC-Pascal users discussions <fpc-pascal@lists.freepascal.org>
> Subject: [fpc-pascal] Broken Links on Free Pascal Wiki
> Message-ID:
>         <
> capgcr8-zo1-seesinxxxteo5hcwsy+y1ndq+vkdaq3lj0rr...@mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
>
> Dear Free Pascal Team,
>
> I understand and appreciate that Free Pascal is a volunteer-driven project,
> and I?m grateful for all the work that has gone into it over the years.
>
> While researching style guides for something I?m working on, I went to the
> Free Pascal wiki to look for documentation. Unfortunately, both the links I
> found for the style guide and the project guidelines appear to be dead. I
> was hoping to refer to these resources, but couldn?t access them. I could
> otherwise Delphi 11 based guide?
>
> Out of curiosity, I also wondered whether there might be other important
> pages that have gone offline or been moved. Is there an updated location
> for these documents? And if there?s a way I could help with checking or
> updating wiki links, I?d be happy to pitch in.
>
> Thanks again for your time and for maintaining such a valuable tool for the
> Pascal community.
>
> Best regards,
> Tim Coates
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <
> http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20250731/1a5bb934/attachment-0001.htm
> >
>
> ------------------------------
>
> Subject: Digest Footer
>
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>
>
> ------------------------------
>
> End of fpc-pascal Digest, Vol 253, Issue 16
> *******************************************
>
>
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to