Ruby 二进制文件的临时文件损坏

Ruby tempfile corruption of binary files

经过大量研究后,我发现 RubyZip 可以破坏二进制文件。仔细查看后,似乎 Tempfile class 无法正确重新打开二进制文件。为了演示效果,请使用以下脚本:

require 'tempfile'

tmp = Tempfile.new('test.bin', Dir.getwd)
File.open('test.bin', 'rb') { |h| IO.copy_stream(h, tmp) } # => 2
# 2 is the expected number of bytes
tmp.close
# temporary file (looking in OS) now really IS 2 bytes in size
tmp.open
# temporary file (looking in OS) now is 1 byte in size
tmp.binmode
# temporary file (looking in OS) still has the wrong number of bytes (1)
tmp.read.length # => 1
# And here is the problem I keep bumping into

我使用的 test.bin 文件只包含两个字节:00 1a。临时文件损坏后,它包含 1 个字节:00。如果重要的话我是 运行 windows.

有什么我想念的吗?这是故意的行为吗?如果是这样,有没有办法防止这种行为?

谢谢

实例 open method 记录为:

Opens or reopens the file with mode r+.

这意味着您不能依赖该方法以正确的模式打开它。这没什么大不了的,因为 Tempfile 的正常使用是不同的:

tmp = Tempfile.new('test.bin', Dir.getwd)
File.open('test.bin', 'rb') { |h| IO.copy_stream(h, tmp) } # => 2
tmp.rewind

现在一旦它 "rewound" 你就可以从头开始读取你想要的任何数据。