【问题标题】:NoMethodError for readbytes on Ruby File classRuby File 类上 readbytes 的 NoMethodError
【发布时间】:2013-11-03 11:23:25
【问题描述】:

我正在编写一个脚本来从 PNG 文件中读取标头字节。我想在File 上使用readbytes 方法:

f = File.open("Boots.png", "rb:binary")
header = f.readbytes(8)

但我在第二行得到NoMethodError

NoMethodError: undefined method `readbytes` for #<File:Boots.png>
    from (irb):2
    from #:0

为什么?据我从文档中可以看出,readbytesIO 类的一部分,是File 的父级,并且应该对我可用,不需要或包含。我几乎完全按照大卫弗拉纳根指南中的样本进行操作;我什至可以在我的 Ruby 安装中找到源文件 readbytes.rb

请注意,我在 Windows 7 上运行 MRI 1.8.7。

【问题讨论】:

  • 此时您不应该使用 Ruby 1.8。你应该切换到 Ruby 2.0。
  • 事实证明read() 工作正常。

标签: ruby ruby-1.8


【解决方案1】:

readbytes 不是IOFile 的成员(您在哪里找到文档中的条目?)。使用IO#read([length]) 从文件中读取字节。您可能需要String#unpack 将字符串转换为您想要比较的魔术头。

【讨论】:

  • Ruby 1.8 好像有这样的方法。也许它在现代 Ruby 中已被弃用。
  • 谢谢。 @sawa,有没有办法确定它何时被弃用?请注意,我需要使用 1.8.7——在我的环境中我别无选择。
  • @WaveformDelta 通过p File.methods检查可用的方法。
猜你喜欢
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多