Re: Raku IO IceDrive bug

[email protected] (ToddAndMargo via perl6-users)
Newsgroups perl.perl6.users
Message-ID <[email protected]>

On 10/16/23 06:54, Ralph Mellor wrote:
>> if not FileExists( $WanIpFileName )  {
>>      $WanIpFileName.IO.open(:w);
>>      spurt "$WanIpFileName", "New File Opened";
>> }
> 
> Afaik, depending on how you choose to look at things,
> there's a doc error (doc for `spurt` doesn't mention that
> it opens the file it's spurting to), and/or behavior due to
> your Windows file system / account settings that leads
> to the issue you see, and/or a bug in your code.
> 
> Let me explain. Here's what the code does:
> 
> 1. Opens the file with `$WanIpFileName.IO.open(:w);`
> if it doesn't already exist.
> 
> 2. Opens the file with `spurt` and writes to it.
> 
> And that causes the behavior you see.
> 
> Presumably, on your system/setup, doing those two things
> fails because the second open fails due to the first one.
> 
> So it succeeds the second time around because the file
> already exists (though blank) and the `spurt` goes ahead.
> 
> I'd argue that the bug is ultimately in your code, perhaps
> due to you not realizing that `spurt` opens the file it spurts
> to, because the doc doesn't say so.
> 
> Whichever way one looks at it, there's no bug in Raku(do).
> 
> --
> love, raiph


Hi Raiph,

Interesting.  Be nice if it was me.  I can fix me.
I can't fix bugs in languages.

Looking at
     https://docs.raku.org/type/IO::Path

I only find one instance of IO.open and it is an
example for "unlink"

     'foo.txt'.IO.open(:w).close;

I was using it to create a file.  I can not find
any discussion of that.

And I could find no discussion of file locks either.

     spurt "$WanIpFileName", "New File Opened";

was only added to see it I could write to the newly
created file.  Apparently, not.  And no error message
complaining about being denied access (file lock?).

Maybe I am opening a handle that is blocking
spurt from writing to the file.  It should not
matter, but apparently is does.

And if the above is the case, it is a bug in Raku.

Maybe I should have done
     $WanIpFileName.IO.open(:w).close;


What I need is what function Raku is using to support fileapi.h:
     CreateFileA function (fileapi.h)
 
https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea

And I see that fileapi.h is also opening a handle
which probably should also be closed.

I really do not feel like writing the api call myself.

Thank you for the help,
-T

p.s.  I adore Linux's "touch" command.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.