<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=us-ascii"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><base href="x-msg://6/"><style><!--
/* Font Definitions */
@font-face
{font-family:Helvetica;
panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
{font-family:Helvetica;
panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
{font-family:Cambria;
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:Tahoma;
panose-1:2 11 6 4 3 5 4 4 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:"Cambria","serif";}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
span.apple-style-span
{mso-style-name:apple-style-span;}
span.apple-converted-space
{mso-style-name:apple-converted-space;}
span.EmailStyle19
{mso-style-type:personal-reply;
font-family:"Calibri","sans-serif";
color:#1F497D;}
.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 lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>I’m not the one writing the file. I’m the one reading it. I have no control over the writing.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Thanks for the thoughts, though.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>DBM<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><div style='border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt'><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> Tony Rogvall [mailto:tony@rogvall.se] <br><b>Sent:</b> Wednesday, March 07, 2012 11:40 AM<br><b>To:</b> David Mercer<br><b>Cc:</b> erlang-questions@erlang.org<br><b>Subject:</b> Re: [erlang-questions] Reading a file before it has been completely written<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal>- Create and open a file with a temporary name.<o:p></o:p></p><div><p class=MsoNormal>- Write the file content.<o:p></o:p></p><div><p class=MsoNormal>- Close the file.<o:p></o:p></p></div><div><p class=MsoNormal>- Rename the file to the name/place you want.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>works ?<o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><p class=MsoNormal>/Tony<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p><div><div><div><div><p class=MsoNormal>On 7 mar 2012, at 18:25, David Mercer wrote:<o:p></o:p></p></div><p class=MsoNormal><br><br><o:p></o:p></p><div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>While this isn’t an Erlang-specific question, the problem arises from my using Richard Carlsson’s<span class=apple-converted-space> </span><i>file_monitor</i>(<a href="https://github.com/richcarl/eunit/blob/master/src/file_monitor.erl">https://github.com/richcarl/eunit/blob/master/src/file_monitor.erl</a>), which sends messages when a file or directory is changed. I have found that it is not unusual to get a message about a new file before the file has been completely written.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>I had thought that by doing a<span class=apple-converted-space> </span></span><span style='font-size:11.0pt;font-family:Consolas'>file:open(Filepath, [read])</span><span class=apple-converted-space><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'> </span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>and making sure I got back<span class=apple-converted-space> </span></span><span style='font-size:11.0pt;font-family:Consolas'>{ok, _}</span><span class=apple-converted-space><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'> </span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>rather than</span><span style='font-size:11.0pt;font-family:Consolas'>{error, eacces}</span><span class=apple-converted-space><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'> </span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>I could avoid those cases, but that approach has failed for me: this morning, I got back<span class=apple-converted-space> </span></span><span style='font-size:11.0pt;font-family:Consolas'>{ok, _}</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>, but the file was not completely written yet.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>Another approach I tried was to attempt to obtain an exclusive lock (I think it was<span class=apple-converted-space> </span></span><span style='font-size:11.0pt;font-family:Consolas'>file:open(Filepath, [read, exclusive])</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>), but in my testing I came across the bizarre scenario where I would copy a file into the monitored directory, the file_monitor would send the message, but the Erlang process that does the file-open didn’t see it, so created the file (the documentation says it creates the file if it does not exist), and then I got a message in my window where I was copying that the file already exists, do I want to overwrite it.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>Another approach I tried was renaming the file to itself. All my tests indicated that that approach would work, but all my tests also indicated that just doing the<span class=apple-converted-space> </span></span><span style='font-size:11.0pt;font-family:Consolas'>file:open(Filepath, [read])</span><span class=apple-converted-space><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'> </span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>would work, too, so I chose it, as it seemed cleaner. I could revert to the rename approach, but I’m not even sure now that that will work.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>I imagine others among us have encountered this issue, and rather than reinvent the wheel, what is the favored approach to handling this issue?<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>Cheers,<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>David Mercer<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'> <o:p></o:p></span></p></div><p class=MsoNormal><span style='font-size:13.5pt;font-family:"Helvetica","sans-serif"'>_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br><a href="http://erlang.org/mailman/listinfo/erlang-questions">http://erlang.org/mailman/listinfo/erlang-questions</a><o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal><span class=apple-style-span><span style='font-size:9.0pt;font-family:"Arial","sans-serif";color:#333333'>"Installing applications can lead to corruption over time. Applications gradually write over each other's libraries, partial upgrades occur, user and system errors happen, and minute changes may be unnoticeable and difficult to fix"</span></span><span style='font-size:13.5pt;font-family:"Helvetica","sans-serif";color:black'><o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:13.5pt;font-family:"Helvetica","sans-serif";color:black'><o:p> </o:p></span></p></div><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal><o:p> </o:p></p></div></div></div></div></div></div></body></html>