Ruby早产EOF?

时间:2011-06-23 19:39:03

标签: ruby base64 eof

我正在尝试在Ruby中将一个文件写入另一个,但输出似乎过早停止。

输入文件 - 带有base64嵌入字体的大型CSS文件

输出文件 - 基本的html文件。

#write some HTML before the CSS (works)
...
#write the external CSS (doesn't work, output finished prematurely)
while !ext_css_file.eof()        
    out_file.puts(ext_css_file.read())
end
...
#write some HTML after the CSS (works)

生成的文件基本上是一个有效的HTML文件,带有截断的CSS(嵌入字体中间)

当执行put()的结果时,我得到相同的结果:CSS文件只读到最后一个字符串:“RMSHhoPCAGt / mELDBESFBQSggGfAgESKCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA”

1 个答案:

答案 0 :(得分:1)

如果没有更深入地了解CSS文件实际包含的内容,很难提供详细的解决方案。根据您上面的代码,我会尝试这样的事情:

#write some HTML before the CSS (works)
...
#write the external CSS (doesn't work, output finished prematurely)
out_file.puts(ext_css_file.read())
...
#write some HTML after the CSS (works)

我认为您不需要.eof检查,因为read方法读取并返回整个文件内容,如果在文件末尾则返回空字符串或nil。见这里:http://apidock.com/ruby/IO/read

我倾向于读写相同类型的数据。例如,如果我使用puts将数据写入新文件,我会使用readlines读取数据。如果我使用write编写二进制数据,我会使用read读取数据。我会与字符串或字节一致,而不是混合两者。

尝试这样的事情......

File.open('writable_file_path', 'w') do |f|
  # f.puts "some html"
  f.puts IO.readlines('css_file_path')
  # f.puts "some more html"
end