Yerel bir dosyanın içeriğini Rails'de bir değişkene okuyun


87

Tek yapmak istediğim, tüm içeriği yerel bir dosyadan alıp bir değişkende saklamak. Nasıl?

File.read(@icon.full_filename).each {|l| r += l}

bana sadece bir kısmını veriyor. PHP'de sadece kullandım file_get_contents.


1
Bunun benzersiz bir Windows sorunu olduğunu hissediyorum, çünkü bu çözüm ve zed_0xff tarafından önerilen çözüm Mac / Linux'ta mükemmel çalışıyor. File.read yaparken irb'nin \ r \ n olarak \ n dönüştüğünü biliyorum ... belki de burayla ilgilidir?
Steven

Yanıtlar:


165
data = File.read("/path/to/file")

1
Bunu düşündüm, ama bu bana 52 uzunluğunda bir dize veriyor. Dosya.size ("/ yol / / dosya") gittiğimde gerçek dosya boyutu 1676.
Steven

4
Bu, dosyayı açık bırakmaz mı?
Tom Rossi

Bunu beğendim! Başlıkların dosya içerik türünden nasıl
korunacağını

Bu, bir blok kullanmadan okumak için yararlıdır, içeriklerin kolayca ayrıştırılmasına ve bir sınıf oluşturmaya gerek kalmadan diğer bloklar için mevcut olan değişkenlere ayarlanmasına izin verir.
Andrew

3
@ TomRossi'nin sorusunu ele almak için - hayır, bu dosyayı açık bırakmaz. Dosya sınıfında okuma çağrısı dosyayı açar, okur ve kapatır. Ancak, bir dosya örneğinde (önce açılması gereken) read çağrısının çağrılması onu kapatmaz. Burada çağrılan yöntem, ruby-doc.org/core-2.5.0/IO.html#method-i- yerine ruby-doc.org/core-2.5.0/IO.html#method-c-read'dir. oku
AndrewKS

18

IO.binread("/path/to/file")Yakın zamanda bir Ruby tercümanınız varsa kullanmayı düşünmeniz gerektiğini düşünüyorum (yani> = 1.9.2)

IOSınıf belgelerini burada bulabilirsiniz http://www.ruby-doc.org/core-2.1.2/IO.html


2
Bu daha kısadır ve dosyayı sizin için kapatır.
Rob

16

Burada kendi sorumu yanıtlamak ... açık veya File.open işlev çağrısında ek bir bayrak gerektiren ikili dosyaları (benim durumumda bir JPEG) okurken meydana gelen yalnızca Windows'un bir tuhaflığı olduğu ortaya çıkıyor. Olarak revize ettim open("/path/to/file", 'rb') {|io| a = a + io.read}ve her şey yolundaydı.


10
Aslında bir grup dosyayı bir araya data = File.open("file", "rb") {|io| io.read}
getirmedikçe

Madalyayı hak ediyorsunuz efendim. Bu yanıtı bulana kadar bir Windows sunucusundan gönderildiğinde PDF eklerimin neden okunamaz olduğunu anlamaya çalışırken saatlerimi kaybettim.
Augusto Samamé Barrientos
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.