Рубин преждевременный EOF? - PullRequest
1 голос
/ 23 июня 2011

Я пытаюсь записать один файл в другой в Ruby, но вывод кажется преждевременным.

Входной файл - большой файл CSS со встроенными шрифтами base64

Выходной файл - основной 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 (в середине встроенного шрифта)

При выполненииa помещает результат read (), я получаю тот же результат: файл CSS доступен только для чтения до этой последней строки: "RMSHhoPCAGt / mELDBESFBQSggGfAgESKCUAAAAAAAwAlgABAAAAAAABAAUADAABAAAAAAAC"

1 Ответ

1 голос
/ 24 июня 2011

Трудно представить подробное решение, не зная, что на самом деле содержит файл 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
...