【问题标题】:Why Ruby does not read all bytes from a file为什么 Ruby 不会从文件中读取所有字节
【发布时间】:2015-12-18 01:42:13
【问题描述】:

我正在学习 ruby​​,我想按字节读取文件。 它适用于短文本文件,但当我尝试使用图像或 pdf 文件时它会停止读取字节。

我尝试了不同的实现,但得到了相同的结果。这是我的代码:

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图像文件:

还有新图片destination

我看到0x0D0x0A对应\r\n

当我在irb 中手动测试代码时,我看到 4 个初始元素读取良好,然后忽略第 5 个 (0x0D = \r) 元素,并获得下一个 (0x0A = @ 987654343@).

当我使用 pdf 文件运行代码时,我在原始文件中看到:

在新的 pdf 文件中:

当我执行source.read(1) 时,我得到正确的值\r\n

为什么.getbyte 忽略0x0D 字节(\r),并说没有更多的字节?

我可以从"\r""\n" 字符串中获取十进制值吗?

【问题讨论】:

标签: ruby file


【解决方案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

【讨论】:

    猜你喜欢
    • 2020-09-05
    • 2012-10-05
    • 1970-01-01
    • 2020-06-12
    • 2017-05-28
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多