From: Robert Klemme Date: 2007-12-22T05:10:03+09:00 Subject: Re: Binary file reading in Ruby On 21.12.2007 15:34, rohit2000s@yahoo.com wrote: > On Dec 21, 5:37 pm, Robert Klemme wrote: >> 2007/12/21, rohit20...@yahoo.com : >> >> >> >>> 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. >> 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 >> >> -- >> 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. 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