[R] Open an r+b file connection on Windows

Benjamin.STABLER@odot.state.or.us Benjamin.STABLER at odot.state.or.us
Fri Apr 25 22:32:43 CEST 2003

Professor Ripley,

Thanks for the quick response.  It is my understanding that "w+b" will open
a file for reading and writing but if a file with the same name already
exists then its contents are erased before the file is open.  So "w+b" is
not quite what I want.  I think I need "r+b".  And yes, I meant to seek the
*write* - sorry that I left off the rw argument to seek.  

Ben Stabler
Transportation Planning Analysis Unit
Oregon Department of Transportation
555 13th Street NE, Suite 2
Salem, OR 97301  Ph: 503-986-4104

>-----Original Message-----
>From: Prof Brian Ripley [mailto:ripley at stats.ox.ac.uk]
>Sent: Friday, April 25, 2003 1:18 PM
>To: STABLER Benjamin
>Cc: r-help at stat.math.ethz.ch
>Subject: Re: [R] Open an r+b file connection on Windows
>On Fri, 25 Apr 2003 Benjamin.STABLER at odot.state.or.us wrote:
>> I am trying to open an existing binary file, seek to a 
>position in the
>> middle, and then write one byte, while keeping the already 
>existing data
>> after that byte.  It seems to me that I am unable to open a 
>connection to a
>> binary file in both read and write mode.  I can open the 
>"r+b" binary file
>> connection and seek around, but I can't write to the file.  
>And looking at
>> the function definition for writeBin, it seems that writeBin 
>> creates a connection of type "wb" not what is specified by the R file
>> object.  
>Only if con is a character string, which it is not here ....
>> I am working on Windows Nt 4.0 with R 1.7.  Any ideas?  Thanks in
>> advance.
>> #Create file
>> x<-1:50
>> myfile <- file("test","wb")
>> writeBin(as.real(x),myfile, 4)
>> close(myfile)
>> myfile <- file("test","r+b")
>> myfile
>> description       class        mode        text      opened  
>  can read
>> can write 
>>      "test"      "file"       "r+b"    "binary"    "opened"  
>     "yes"
>> "no"  
>That is what is wrong:  try w+b (it's a bug, and I've fixed it for
>> seek(myfile,where=40,origin="start")
>> readBin(myfile, real(), 10, 4)
>> [1] 11 12 13 14 15 16 17 18 19 20
>> #Write the number 99 to file
>> seek(myfile,where=40,origin="start")
>> writeBin(as.real(99),myfile, 4)
>> Error in writeBin(as.real(99), myfile, 4) : 
>>         cannot write to this connection
>Did you mean to seek the *write* here: you seek-ed the read 
>position and 
>so wrote at the beginning?  R connections have separate read and write 
>Brian D. Ripley,                  ripley at stats.ox.ac.uk
>Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
>University of Oxford,             Tel:  +44 1865 272861 (self)
>1 South Parks Road,                     +44 1865 272866 (PA)
>Oxford OX1 3TG, UK                Fax:  +44 1865 272595

More information about the R-help mailing list