当使用BinData无法读取时停止从文件读取
问题描述:
当前我正在使用BinData gem解析二进制文件格式。它工作得很好,除了我不知道停止在哪里。该文件分为我使用BinData Records读取的属性。可以有16到18个属性之间的任何地方(取决于它所需的文件)。所以,如果我这样做:当使用BinData无法读取时停止从文件读取
16.times{
# parse data from property.
}
时,有16个属性但是,如果我碰到它到17,我得到以下错误工作正常。
'readbytes': End of file reached (EOFError)
我的问题是,我如何才能避免16倍都在一起,并有它读取,直到它读取它可以将所有属性,那么当它到达文件的错误。为此停止。
答
class PcapFile < BinData::Record
endian :little
struct :head do
uint32 :magic
uint16 :major
uint16 :minor
int32 :this_zone
uint32 :sig_figs
uint32 :snaplen
uint32 :linktype
end
array :records, :read_until => :eof do
uint32 :ts_sec
uint32 :ts_usec
uint32 :incl_len
uint32 :orig_len
string :data, :length => :incl_len
end
end
在该示例中采取的方法是告诉BinData,有一组记录,然后让他们阅读所有。
你可以将文件视为数组并使用'read_until::eof'? –
我想我提出了一个小问题。在查看文件后,它看起来好像以一个字符串终止符结束。我可以寻找并停止阅读。虽然再次感谢您的帮助! – Fianite
当询问您的代码有问题时,我们希望您的代码的最小示例能够证明问题。请阅读“[mcve]”。 –