On Mon, Jun 24, 2019 at 4:09 PM David Storrs <david.sto...@gmail.com> wrote:
>
> I actually did try writing something at the extended position, although I 
> removed it before posting the above.  Even with a write, it still does not do 
> as expected.  In fact, the results are even stranger:
>
> #lang racket
>
> (define (say . args) (displayln (apply ~a args)))
> (define the-path "./test-file")
> (when (file-exists? the-path)  (delete-file the-path))
> (say "before open, file exists?: " (file-exists? the-path))
>
> (let ([the-port (open-output-file the-path #:mode 'binary #:exists 'append)])
>   (say "after open, file exists?: " (file-exists? the-path))
>   (say "before repos, file size, position: " (file-size the-path) ", "
>        (file-position the-port))
>   (file-position the-port 1000); should extend the file and fill the 
> intervening space with 0
>   (say "before flush, file size, position: " (file-size the-path) ", "
>        (file-position the-port))
>   (flush-output the-port) ; ensure that the filling 0s have been written, 
> just to be sure
>   (say "before write, file size, position: " (file-size the-path) ", "
>        (file-position the-port))
>
>   (write "foo" the-port)
>   (say "before 2nd flush, file size, position: "
>        (file-size the-path) ", " (file-position the-port))
>   (flush-output the-port)
>   (say "finally, file size, position: " (file-size the-path) ", " 
> (file-position the-port))
>   )
> Ouptut:
>
> before open, file exists?: #f
> after open, file exists?: #t
> before repos, file size, position: 0, 0
> before flush, file size, position: 0, 1000
> before write, file size, position: 0, 1000
> before 2nd flush, file size, position: 0, 1005
> finally, file size, position: 5, 5
>
> Personally, i find this even weirder.  I wrote 3 characters, so why is the 
> file size 5?  (Which it is, on disk.)
>

FWIW, (write "foo") writes "\"foo\"" to the file. Maybe you want
write-string or write-bytes?



> On Mon, Jun 24, 2019 at 4:57 PM Jon Zeppieri <zeppi...@gmail.com> wrote:
>>
>> On Mon, Jun 24, 2019 at 4:51 PM Jon Zeppieri <zeppi...@gmail.com> wrote:
>> >
>> > `lseek` docs say:
>> >
>> > > The lseek() function shall allow the file offset to be set beyond the 
>> > > end of the existing data in the file. If data is later written at this 
>> > > point, subsequent reads of data in the gap shall return bytes with the 
>> > > value 0 until data is actually written into the gap.
>> >
>>
>> And the Windows call `SetFilePosition` is similar:
>>
>> > It is not an error to set a file pointer to a position beyond the end of 
>> > the file. The size of the file does not increase until you call the 
>> > SetEndOfFile, WriteFile, or WriteFileEx function. A write operation 
>> > increases the size of the file to the file pointer position plus the size 
>> > of the buffer written, which results in the intervening bytes 
>> > uninitialized.
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to racket-users+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/racket-users/CAE8gKodw3c2wqUBdAPKRkX3hqin4fhZ8kjeFKh3LouFhY4-8XQ%40mail.gmail.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/CAMTzy%2BbV-SExfSR6LSXX7r_Zpg7gD37LROf__o8C9HxpykaFNQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to