2013-11-03 4 views
0

PNG 파일에서 헤더 바이트를 읽는 스크립트를 작성하고 있습니다. 나는 Filereadbytes 방법을 사용하려면 :Ruby 파일 클래스의 readbytes에 NoMethodError가 발생했습니다.

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입니다. 필요하거나 포함하지 않아도 사용할 수 있어야합니다. 나는 David Planagan 가이드의 샘플을 거의 정확히 따르고 있습니다. 내 Ruby 설치에서 소스 readbytes.rb 파일을 찾을 수도 있습니다. 나는 윈도우 7

+0

현재로서는 Ruby 1.8을 사용하지 않아야합니다. Ruby 2.0으로 전환해야합니다. – sawa

+0

''''read()''''는 잘 작동합니다. – WaveformDelta

답변

3

readbytes에 MRI 1.8.7을 실행하고

참고 IO 또는 File (여기서 당신이 문서의 항목을 찾았나요?)의 구성원이 아닙니다. 파일에서 바이트를 읽으려면 IO#read([length])을 사용하십시오. 그리고 비교하려는 문자열을 magic header로 변환하려면 String#unpack가 필요할 수 있습니다.

+0

[Ruby 1.8] (http://ruby-doc.org/stdlib-1.8.7/libdoc/readbytes/rdoc/IO.html)에 그러한 메소드가있는 것처럼 보입니다. 아마도 현대 Ruby에서는 사용되지 않을 것입니다. – sawa

+0

감사합니다. @ 사와, 더 이상 사용되지 않을시기를 명확히 결정하는 방법이 있습니까? 참고로, 1.8.7을 사용해야합니다. 제 환경에서는 선택의 여지가 없습니다. – WaveformDelta

+0

@WaveformDelta 'p File.methods'를 수행하여 사용 가능한 방법을 확인하십시오. – sawa