Yerel bir dosyadan veya url'den bir IO akışı açın


104

Başka dillerde, yerel bir dosyaya giden bir yol veya bir url içeren bir dizeyi alıp okunabilir bir GÇ akışı olarak açabilen kitaplıklar olduğunu biliyorum.

Bunu Ruby'de yapmanın kolay bir yolu var mı?

Yanıtlar:


224

open-uri , standart Ruby kütüphanesinin bir parçasıdır ve hem openbir url hem de yerel bir dosya açabilmeniz için davranışını yeniden tanımlayacaktır . DöndürürFile nesne , bu nedenle readve gibi yöntemleri çağırabilmeniz gerekir readlines.

require 'open-uri'
file_contents = open('local-file.txt') { |f| f.read }
web_contents  = open('http://www.stackoverflow.com') {|f| f.read }

2
Burada ActionMailer ekinden yaptığınız gibi bir dosya nesnesini döndürmenin bir yolu var mı?
AnApprentice

9
Bunun artık biraz eski olduğunu bilin, ancak şunları da yapabilirsiniz:content = open("http://example.com").read
Automatico

6
Yapabilirsiniz, ancak bunu kapatmanın dışında yapmak dosya tanımlayıcısını açık tutacaktır. Bu, bazı kullanımlar için bir sorun olabilir.
Aaron Hinni

19
Not open-uriolmaz akarsu bunun bir ilk 4k okuyamaz böylece, bir dosya. açılış anında tüm dosyayı hafızaya open-uriokuyacaktır .
zed_0xff

3
URI.parse('http://www.stackoverflow.com').open { |f| f.read }Sigortalamanın bir yolunu arıyorsanız, aramaz Kernal.open. Ayrıca rubocop güvenlik kurallarını da aşıyor.
newdark-it
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.