当使用BinData无法读取时停止从文件读取

当使用BinData无法读取时停止从文件读取

问题描述:

当前我正在使用BinData gem解析二进制文件格式。它工作得很好,除了我不知道停止在哪里。该文件分为我使用BinData Records读取的属性。可以有16到18个属性之间的任何地方(取决于它所需的文件)。所以,如果我这样做:当使用BinData无法读取时停止从文件读取

16.times{ 
    # parse data from property. 
} 

时,有16个属性但是,如果我碰到它到17,我得到以下错误工作正常。

'readbytes': End of file reached (EOFError) 

我的问题是,我如何才能避免16倍都在一起,并有它读取,直到它读取它可以将所有属性,那么当它到达文件的错误。为此停止。

+0

你可以将文件视为数组并使用'read_until::eof'? –

+0

我想我提出了一个小问题。在查看文件后,它看起来好像以一个字符串终止符结束。我可以寻找并停止阅读。虽然再次感谢您的帮助! – Fianite

+0

当询问您的代码有问题时,我们希望您的代码的最小示例能够证明问题。请阅读“[mcve]”。 –

examples/tcp_ip.rb

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,有一组记录,然后让他们阅读所有。