<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
tt
        {mso-style-priority:99;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        color:black;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;
        color:black;}
span.EmailStyle21
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle22
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle23
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body bgcolor=white lang=EN-US link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'>Thanks for the advice on things to look at. <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'>Here is some more information.  First of all, this happens extremely rarely, about once a month or two on a pc here and another there, but it’s odd that it’s always this one file, and it should not be happening at all.    I’m using turbo pascal compatibility mode, and it’s a console application, there is no multi threading going on, it’s straight inline code.  No other programs on the system ever access this file and there is no reason to open it with a text editor or anything like that.    The error I get is when trying to open the file to read it.  It’s something like read past end of file, because the corrupted file is just one long line, once I read that, the second read is past the end of file.  I can do checking to get the file length and avoid the error, but that doesn’t solve the real issue, which is that the data that is supposed to be in the file is just gone.  <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'>Bitfile is type TEXT like this: <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'>Bitfile: Text;<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'>and my variables are all doubles.  <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'>Normally what happens is, everything is fine for a month or two, but then one day someone will come in and notice the error on the screen, it was fine the night before, the program running overnight, in the morning the program is not running,  and when the attempt is made to run it,  The error is found and the cause of the error is BitSave.pax has been corrupted and is now a long string of [nul]   the computers this runs on are all windows 10 with Samsung solid state hard drives.    I suspect that the majority of the time, this has happened due to winders doing an automatic update and restarting without permission as windows 10 annoyingly likes to do, thus crashing my program in order to do this restart that is SO important.  I have shut off windows update via group policy, but still had the problem since, however I cannot be certain there was not a power failure.   The computers are set to re-power up after power loss in BIOS and the program is set to run on startup, in fact the computers have no other function than to run this one program, they are never used for anything else.  The procedure that writes out this file is only ever used when one of the variables is changed, and they can only be changed by manual input, which is not happening anymore when the issue occurs.   The thing is, even if windows forced a restart while my program was running this file should have been closed at the time, because if someone was standing there editing the variables, they would see the restart notification and close the program first, or be able to tell me they had a power failure. <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'>As a temporary measure, I’m just writing out the file twice so at least I have a backup, but I don’t see why the backup would not be corrupted by this same issue, so that’s probably pretty useless.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'>Unfortunately this is difficult to troubleshoot because it happens so rarely. I have tried to force it to happen by terminating my program with task manager and cannot cause the file to be corrupted.   I have not yet tried to duplicate the error by shutting down the system while the program is running.  I could try that.     If it does turn out to be an issue with my program running during shutdown,  is there some way I can detect a pending shutdown and exit normally before the shutdown happens?   It wouldn’t really solve the cause of the issue, but it would possibly help prevent some of the occurrences related to shutdowns, but would not help with power failures.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'>I am unable to use Try in turbo pascal compatible mode.  If I use it, I get identifier not found ‘Try’   If I attempt to compile in some mode other than turbo pascal compatible, I end up with thousands of other errors, so I would pretty much have to do a complete re-write.   I can’t see how the close could not be run, there is no way out of my procedure without running it since it’s a single thread console application.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'>James<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'>From:</span></b><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'> fpc-pascal-bounces@lists.freepascal.org [mailto:fpc-pascal-bounces@lists.freepascal.org] <b>On Behalf Of </b>Santiago A.<br><b>Sent:</b> Wednesday, February 22, 2017 3:48 AM<br><b>To:</b> FPC-Pascal users discussions <fpc-pascal@lists.freepascal.org><br><b>Subject:</b> Re: [fpc-pascal] FreePascal Windows - Force files to write to disk<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal>El 21/02/2017 a las 22:12, James Richters escribió:<o:p></o:p></p></div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'> </span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>Thanks for any advice on this</span><o:p></o:p></p></blockquote><p class=MsoNormal><br>My first action would be to guarantee that the file is closed with a try...finally.<br><br><tt><span style='font-size:11.0pt'>AssignFile(BitFile,'BitSave.pax');</span></tt> <o:p></o:p></p><p class=MsoNormal><tt><span style='font-size:11.0pt'>ReWrite(BitFile);</span></tt><o:p></o:p></p><p class=MsoNormal><tt><span style='font-size:11.0pt'>try</span></tt><o:p></o:p></p><p class=MsoNormal><tt><span style='font-size:11.0pt'>....</span></tt><o:p></o:p></p><p class=MsoNormal><tt><span style='font-size:11.0pt'>finally</span></tt><o:p></o:p></p><p class=MsoNormal><tt><span style='font-size:11.0pt'>  CloseFile(BitFile);</span></tt><o:p></o:p></p><p class=MsoNormal><tt><span style='font-size:11.0pt'>end;</span></tt><o:p></o:p></p><p class=MsoNormal><br>Second:<br><br>Do you have the file opened with an editor, or things like that, while running the program?.<br><br>Third:<br><br>Check that all variables have valid values and that values are converted to string properly to be printable.<br><br>Fourth:<br><br>Do you use somewhere {$I+} {$I-}? I also had some problems with that with old programs.<br><br>Fourth:<br><br>What's the type BitFile? <br>BitFile: TextFile;<br>BitFile: File;<br><br>Maybe using writeln with non-textfile files may cause problems.<br><br><br><o:p></o:p></p><pre>-- <o:p></o:p></pre><pre>Saludos<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>Santiago A.<o:p></o:p></pre></div></body></html>