unknown
December 21, 2007, 11:20am
1
Hi All,
I am trying to read in a binary file of size ‘n’ using:
mem_buf = IO.read(file_name, n, 0)
Where file_name is an argument to the script.
But after the read I observed that the size of the mem_buf is less
than ‘n’ (It should be equal to ‘n’).
(mem_buf.size != n).
This script fails on the above read check.
Any ideas what I might be doing wrong here. Any help will be
appreciated.
Thanks in advance,
Rohit
unknown
December 21, 2007, 11:40am
2
unknown wrote:
mem_buf = IO.read(file_name, n, 0)
Where file_name is an argument to the script.
But after the read I observed that the size of the mem_buf is less
than ‘n’ (It should be equal to ‘n’).
It looks like your file size is less than number of bytes you’re trying
to read.
In this case size of the mem_buf must be equal to the file size.
mem_buf.size == File.size(file_name)
Regards,
arkadi4
unknown
December 21, 2007, 1:38pm
3
2007/12/21, [email protected] [email protected] :
(mem_buf.size != n).
This script fails on the above read check.
Any ideas what I might be doing wrong here. Any help will be
appreciated.
Either, the file is smaller than n or you have an issue with
conversion (typically on Windows). For binary files I’d do this which
is more portable:
mem_buf = File.open(file_name,“rb”) {|io| io.read}
Also, it helps documenting things. Bw, you do not need the offset and
size arguments.
Kind regards
robert
unknown
December 21, 2007, 3:35pm
4
On Dec 21, 5:37 pm, Robert K. [email protected] wrote:
Where file_name is an argument to the script.
robert
–
use.inject do |as, often| as.you_can - without end
Thanks a lot ! That was the exact problem I had - getting that part of
code to work on windows.
Could you please take time to detail a bit on:
“{|io| io.read}” part of the code.
Also is there a way to add the offset and size arguments to the read
method that you suggested ?
Thanks in advance,
Rohit
unknown
December 21, 2007, 9:10pm
5
On 21.12.2007 15:34, [email protected] wrote:
than ‘n’ (It should be equal to ‘n’).
Also, it helps documenting things. Bw, you do not need the offset and
code to work on windows.
You probably should have mentioned this.
Could you please take time to detail a bit on:
“{|io| io.read}” part of the code.
It’s the block form of File.open and the return value of File.open in
this case is the result of the block.
Also is there a way to add the offset and size arguments to the read
method that you suggested ?
http://ruby-doc.org/core/classes/IO.html#M002295
Cheers
robert