我正在尝试在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”
答案 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