2008-11-04 20 views
85

से एक आईओ स्ट्रीम खोलें मुझे पता है कि अन्य भाषाओं में libs हैं जो एक स्ट्रिंग ले सकते हैं जिसमें स्थानीय फ़ाइल या यूआरएल का पथ हो और इसे एक पठनीय आईओ स्ट्रीम के रूप में खोलें।स्थानीय फ़ाइल या यूआरएल

क्या रूबी में ऐसा करने का कोई आसान तरीका है?

उत्तर

191

open-uri मानक रूबी लाइब्रेरी का हिस्सा है, और यह open के व्यवहार को फिर से परिभाषित करेगा ताकि आप एक यूआरएल, साथ ही एक स्थानीय फ़ाइल खोल सकें। यह File ऑब्जेक्ट देता है, इसलिए आपको read और readlines जैसी विधियों को कॉल करने में सक्षम होना चाहिए।

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

@ यह सिर्फ मेरा दिन बना। धन्यवाद! – AnApprentice

+2

क्या कोई फ़ाइल ऑब्जेक्ट वापस करने का कोई तरीका है जैसा आपने यहां एक्शनमेलर अटैचमेंट से किया था? – AnApprentice

+0

वह 'उत्कृष्ट - धन्यवाद। –

0

यूआरएल के लिए, आप अपने दस्तावेज़ से rest-client, चाहते हो सकता है

आप किसी फ़ाइल के जवाब से डेटा स्ट्रीम करने के लिए के रूप में यह आता है, बल्कि पूरी तरह से स्मृति में से चाहते हैं, आप भी कर सकते हैं पास क्लाइंट :: Request.execute पैरामीटर: block_response जिस पर आप ब्लॉक/proc पास करते हैं। इस ब्लॉक को नेट :: HTTP से कच्चे अनमोडिफाइड नेट :: HTTPResponse ऑब्जेक्ट प्राप्त होता है, जिसका उपयोग आप प्रत्येक फ़ाइल के रूप में सीधे फ़ाइल में स्ट्रीम करने के लिए कर सकते हैं मिला है।

File.open('/some/output/file', 'w') {|f| 
    block = proc { |response| 
    response.read_body do |chunk| 
     f.write chunk 
    end 
    } 
    RestClient::Request.execute(method: :get, 
           url: 'http://example.com/some/really/big/file.img', 
           block_response: block) 
} 
संबंधित मुद्दे