Ruby文件写入窗口返回错误的文件大小?

我仍然在学习ruby,所以我敢肯定,我在这里做错了什么,但在Windows上使用ruby1.9.3,我有一个问题写一个随机ascii垃圾文件是一个特定的大小。 我需要能够编写这些文件在我正在QAing的应用程序上进行testing。 在Mac和* nix上,文件大小每次都正确写入。 但在Windows上,它会生成随机大小的文件,一般在1,024字节和1,031字节之间。

我敢肯定,这个问题是rstr正在生成的字符之一是计为两个字符,但是…似乎这不应该发生。

这是我的代码:

num = 10 k = 1 for i in 1..num fname = "f#{i}.txt" f = File.new(fname, "w") for k in 1..size rstr = "#{(1..1024).map{rand(255).chr}.join}" f.write rstr print " #{rstr.size} " # this returns 1024 every time. rstr = "" end f.close end 

还试过:

  opts = {} opts[:encoding] = "UTF-8" fname = "f#{i}.txt" f = File.new(fname, "w", opts) 

默认情况下,在Windows中打开的文件是以文本模式打开的,这意味着行结束和其他细节被调整。

如果你想要的文件是完全按照你想要的字节到字节,你需要以二进制模式打开文件:

 File.new("foo", "wb") do |f| # ... end 

b在POSIX操作系统上是被忽略的,所以你的脚本现在是跨平台兼容的。

注意:我使用了块语法来管理文件,所以一旦块被执行,它就会正确地关闭和配置文件处理程序。 您不再需要担心关闭文件;-)

希望这可以帮助。

没有任何255个ASCII码。 值从0到254。 如果你尝试printf 255.chr ,你会得到一个多字节字符。 由于Windows不标准的UTF-8,你会得到不正确的值。 因此,你面临的问题!

尝试在文件顶部添加#coding: utf-8 。 它应该让事情工作。