एक स्थानीय फ़ाइल की सामग्रियों को रेल में एक चर में पढ़ें


86

मैं केवल एक स्थानीय फ़ाइल से सभी सामग्री प्राप्त करना चाहता हूं और इसे एक चर में संग्रहीत करता हूं। कैसे?

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

केवल मुझे इसका एक हिस्सा देता है। PHP में, मैंने अभी उपयोग किया है file_get_contents


1
मुझे लगता है कि यह एक विशिष्ट विंडोज समस्या है, क्योंकि यह समाधान, और zed_0xff द्वारा प्रस्तावित एक मैक / लिनक्स पर पूरी तरह से ठीक काम करता है। मुझे पता है कि irb बदल जाता है जब file.read करते समय \ n \ n \ n होता है ... शायद यहाँ प्रासंगिक है?
स्टीवन

जवाबों:


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

1
मैंने सोचा था कि, लेकिन यह मुझे लंबाई का एक स्ट्रिंग देता है 52. जब मैं फ़ाइल जाता हूं तो वास्तविक फ़ाइल का आकार। फ़ाइल आकार ("/ पथ / से / फ़ाइल") 1676 है।
स्टीवन

4
फ़ाइल को खुला नहीं छोड़ता है?
टॉम रॉसी

मैं यह पसंद है! यह जानना अच्छा होगा कि हेडर्स को फाइल कंटेंट टाइप से कैसे रखा जाए
टॉम रोजगेरो

यह एक ब्लॉक के उपयोग के बिना पढ़ने के लिए उपयोगी है, जिससे सामग्री को आसानी से पार्स किया जा सकता है और एक वर्ग बनाने की आवश्यकता के बिना अन्य ब्लॉकों के लिए उपलब्ध चर पर सेट किया जा सकता है।
एंड्रयू

3
@ TomRossi के प्रश्न को संबोधित करने के लिए - नहीं, यह फ़ाइल को खुला नहीं छोड़ता है। फ़ाइल वर्ग पर रीडिंग कॉल करना फ़ाइल को खोलता है, पढ़ता है और बंद करता है। हालाँकि, फ़ाइल के एक उदाहरण पर रीडिंग कॉल करना (जिसे पहले खोला जाना था) इसे बंद नहीं करता है। यहाँ कहा जा रहा तरीका रूबी-doc.org/core-2.5.0/IO.html#method-c-read है जो रूबी- doc.org/core-2.5.0/IO.html#method-i- के विपरीत है । पढ़ें
एंड्रयूक्स

18

मुझे लगता है कि आपको IO.binread("/path/to/file")हाल ही में रूबी दुभाषिया का उपयोग करने पर विचार करना चाहिए (यानी = = 1.9.2)

आप IOयहाँ http://www.ruby-doc.org/core-2.1.2/IO.html श्रेणी के दस्तावेज़ पा सकते हैं


2
यह छोटा है और आपके लिए फ़ाइल बंद कर देता है।
रोब

16

यहाँ मेरे अपने प्रश्न का उत्तर देते हुए ... यह पता चलता है कि यह एक विंडोज केवल क्विक है जो बाइनरी फ़ाइलों (मेरे मामले में एक जेपीईजी) को पढ़ने पर होता है, जिसे खुले या File.open फ़ंक्शन कॉल में अतिरिक्त ध्वज की आवश्यकता होती है। मैंने इसे संशोधित किया open("/path/to/file", 'rb') {|io| a = a + io.read}और सब ठीक था।


10
जब तक आप वास्तव में एक साथ फ़ाइलों का एक समूह नहीं कर रहे हैं, मैं सिर्फ इतना ही लिखूंगा:data = File.open("file", "rb") {|io| io.read}
ग्लेन जैकमैन

आप सर, एक पदक के लायक हैं। मैं घंटों तक यह जानने की कोशिश करता रहा कि विंडोज सर्वर से भेजे जाने के बाद मेरे पीडीएफ अटैचमेंट्स क्यों नहीं पढ़े जा रहे थे।
ऑगस्टो समामे बैरिएन्टोस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.