2016-07-08 5 views
2

Я хотел бы знать, как писать картинку дважды, не записывая ее один раз, а затем копируя ее.
Когда изображение загружено, оно записывается в/TMP, а затем копируется на нужный путь (я думаю), что означает, что следующий код:
написать файл несколько раз

cover_buffer = download_pic(link)  
buffer2 = cover_buffer 
open(@dir + 'cover.jpg', 'wb') do |pic| 
    pic << cover_buffer.read() 
end 
open(@dir + 'cover2.jpg', 'wb') do |pic| 
    pic << cover_buffer2.read() 
end 

не работает, так как оба cover_buffer и Буфер2 как Дело в том же файле ведьма была перенесена при написании cover.jpg
Выполнение этого кода будет правильно написать картину в cover.jpg но cover2.jpg будет пустой файл

+0

Какой класс 'cover_buffer'? –

+0

Что означает 'download_pic (link)' return? Пожалуйста, прочитайте «[mcve]». –

ответ

1

проверенное решение

В файле two_for_one.rb:

current_dir = File.expand_path(File.dirname(__FILE__)) 
new_file_1 = File.new(File.join(current_dir, 'image_1.png'), 'w') 
new_file_2 = File.new(File.join(current_dir, 'image_2.png'), 'w') 
origin_file = File.join(current_dir, 'original_image.png') 

begin 
    File.open(origin_file, "r") do |source| 
    until source.eof? 
     chunk = source.read(1024) 
     new_file_1.write(chunk) 
     new_file_2.write(chunk) 
    end 
    end 
ensure 
    new_file_1.close() 
    new_file_2.close() 
end 

Командная строка:

$ ruby two_for_one.rb 
+1

Работает отлично, спасибо большое ^^ –

Смежные вопросы