2016-07-08 1 views
2

Je voudrais savoir comment écrire une image deux fois sans l'écrire une seule fois et ensuite la copier.
Lorsqu'une photo est téléchargée, il est écrit dans le répertoire/tmp puis copiés sur le chemin voulu (je pense) ce qui signifie que le code suivant:
écrire un fichier plusieurs fois

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 

ne fonctionne pas depuis la fois cover_buffer et buffer2 à la fois pointent vers le même fichier whitch a été déplacé lors de l'écriture cover.jpg
exécution que le code va écrire correctement l'image dans cover.jpg mais cover2.jpg sera un fichier vide

+0

Quelle classe est 'cover_buffer'? –

+0

Que renvoie 'download_pic (lien)'? Veuillez lire "[mcve]". –

Répondre

1

TESTE SOLUTION

Dans le fichier 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 

Ligne de commande:

$ ruby two_for_one.rb 
+1

Fonctionne très bien, merci beaucoup ^^ –