2011-06-23 74 views
1

我試圖寫一個文件另一個在Ruby中,但輸出似乎過早停止。Ruby過早的EOF?

輸入文件 - 基本的HTML文件 - 使用Base64的嵌入字體

輸出文件大CSS文件。

#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(中嵌入字體的中間)

當上做閱讀()的結果放,我會得到相同的結果:CSS文件是隻讀到這最後一個字符串:「RMSHhoPCAGt/mELDBESFBQSggGfAgESKCUAAAAAAAwAlgABAAAAAAABAAUADAABAAAAAAAC」

+0

不知道,如果看跌/讀/ EOF工作這麼好起來。你有沒有試過將文件讀入一個字符串,然後把它寫成一個字符串?或者:使用讀/寫 – mkro

回答

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方法讀取並返回整個文件的內容,或者空字符串或零,如果在文件的末尾。看到這裏: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