2015-12-18 81 views
3

我正在學習ruby,我想按字節讀取一個文件。 它可以很好地處理短文本文件,但是當我用圖像或pdf文件進行嘗試時,它會停止讀取字節。爲什麼Ruby不會讀取文件中的所有字節

我嘗試了不同的實現,但我得到了相同的結果。這裏是我的代碼:

destination = File("file2", "w") 
source = File.open("file1", "r") 
source.each_byte do |byte| 
    destination.print (byte).chr 
end 
destination.close 

我想這太:

destination = File("file2", "w") 
source = File.open("file1", "r") 
source.each_byte do |byte| 
    destination.putc(byte) 
end 
destination.close 

我比較原始source映像文件: Original Image

和新圖像destinationNew image

我看到0x0D0x0A對應\r\n

當我在irb手動測試代碼我看到閱讀精細的4個初始元素,然後忽略第五(0x0D = \r)元件,並且獲得下一個(0x0A = \n)。

當我運行一個PDF文件中的代碼,我看到,在原始文件: Original pdf

而這在新的PDF文件: New pdf

當我做source.read(1)我得到正確的值\r\n

爲什麼.getbyte忽略0x0D字節(\r),並說沒有更多的字節?

可以從"\r""\n"字符串中得到十進制值嗎?

+1

http://stackoverflow.com/questions/8929610/automatically-open-a-file-as-binary-with-ruby –

+1

寫得很好的問題,但可能的重複http://stackoverflow.com/q/16821435/1301972 –

回答

1

已經解決。

我正在嘗試不同的編碼,我試圖在二進制模式下打開source文件,但它得到了另一個錯誤,因爲我忘記了在二進制模式下打開destination文件。

它讀取所有字節正常,也可以正常寫入,以二進制模式打開這兩個文件。

在這裏,我的代碼:

destination = File("file2", "wb") 
source = File.open("file1", "rb") 
source.each_byte do |byte| 
    destination.print (byte).chr 
end 
destination.close 
source.close 
相關問題