रूबी में फाइल कैसे बनाएं


170

मैं एक नई फ़ाइल बनाने की कोशिश कर रहा हूं और चीजें काम नहीं कर रही हैं जैसा कि मैं उनसे भी उम्मीद करता हूं। यहाँ मैंने कोशिश की है:

File.new "out.txt"
File.open "out.txt"
File.new "out.txt","w"
File.open "out.txt","w"

मैंने जो कुछ भी ऑनलाइन पढ़ा है उसके अनुसार सभी को काम करना चाहिए लेकिन उनमें से हर एक मुझे यह देता है:

ERRNO::ENOENT: No such file or directory - out.txt

यह आईआरबी और रूबी लिपि से होता है। मैं क्या खो रहा हूँ?


13
पहले दो काम नहीं करने चाहिए, लेकिन दूसरे दो पर्यायवाची हैं और निश्चित रूप से काम करना चाहिए।
एंड्रयू मार्शल

@ और: आप सोच रहे हैं कि केवल पहले दो की कोशिश की गई थी?
म्यू बहुत छोटा है

1
@ म्युइस्टोशॉर्ट एकमात्र निष्कर्ष है जो मैं पहुंच सकता हूं। अनुमतियाँ त्रुटि को फेंक दिया जाएगा Errno::EACCES, नहीं ENOENT
एंड्रयू मार्शल

2
ठीक है, अब मुझे बेवकूफ लग रहा है। पहले दो निश्चित रूप से काम नहीं करते लेकिन दूसरे दो करते हैं। मुझे यकीन नहीं है कि मैंने अपने आत्म को कैसे आश्वस्त किया कि मैंने उन्हें कोशिश की थी। हर किसी का समय बर्बाद करने के लिए क्षमा करें।
Civatrix

1
@Civatrix कोई समस्या नहीं है। हम सभी कभी न कभी समय बर्बाद करते हैं।
डार्थ एलीगेंट

जवाबों:


434

उपयोग:

File.open("out.txt", [your-option-string]) {|f| f.write("write your stuff here") }

आपके विकल्प कहां हैं:

  • r- सिफ़ पढ़िये। फ़ाइल मौजूद होनी चाहिए।
  • w - लिखने के लिए एक खाली फाइल बनाएं।
  • a - अगर यह मौजूद नहीं है, तो एक फ़ाइल में जोड़ें। फ़ाइल बनाई गई है।
  • r+- पढ़ने और लिखने दोनों को अपडेट करने के लिए एक फ़ाइल खोलें। फ़ाइल मौजूद होनी चाहिए।
  • w+ - पढ़ने और लिखने दोनों के लिए एक खाली फाइल बनाएं।
  • a+- पढ़ने और संलग्न करने के लिए एक फ़ाइल खोलें। यदि मौजूद नहीं है तो फ़ाइल बनाई जाती है।

आपके मामले में, 'w'बेहतर है।

या आप कर सकते हैं:

out_file = File.new("out.txt", "w")
#...
out_file.puts("write your stuff here")
#...
out_file.close

11
बहुत बढ़िया जवाब। रूबी conevntion var नाम के लिए स्नेक केस है। बस newbies के लिए एक सिर। outFileजैसा दिखना चाहिए out_file
एडम वाइट

3
@AdamWaite मैंने संदर्भ के लिए इस टिप्पणी को छोड़ते हुए, आपके स्नेक_केस सुझाव के अनुसार उत्तर संपादित किया।
क्रिस

3
@zanbri - अगर मैं फ़ाइल बंद नहीं करता तो क्या होगा?
इरान मोराद

1
शानदार उत्तर, व्यापक और संक्षिप्त
बोरिस

2
@BoratSagdiyev "एक फ़ाइल ऑब्जेक्ट जिसे अब संदर्भित नहीं किया जाता है, कचरा संग्रहण के लिए योग्य हो जाता है। फ़ाइल ऑब्जेक्ट कचरा एकत्र होने पर फ़ाइल स्वचालित रूप से बंद हो जाएगी।" rootr.net/rubyfaq-9.html
jkdev

35

प्रयत्न

File.open("out.txt", "w") do |f|     
  f.write(data_you_want_to_write)   
end

का उपयोग किए बिना

File.new "out.txt"

25

"w+"केवल के बजाय लेखन मोड के रूप में उपयोग करने का प्रयास करें "w":

File.open("out.txt", "w+") { |file| file.write("boo!") }

4
निर्भर करता है कि क्या आप केवल लिखना चाहते हैं ( w) या दोनों पढ़ना और लिखना ( w+)।
jkdev

20

ठीक है, अब मुझे बेवकूफ लग रहा है। पहले दो निश्चित रूप से काम नहीं करते लेकिन दूसरे दो करते हैं। मुझे यकीन नहीं है कि मैंने अपने आप को कैसे आश्वस्त किया कि मैंने उन्हें कोशिश की थी। हर किसी का समय बर्बाद करने के लिए क्षमा करें।

मामले में यह किसी और की मदद करता है, यह तब हो सकता है जब आप किसी निर्देशिका में एक नई फ़ाइल बनाने की कोशिश कर रहे हैं जो मौजूद नहीं है।


11

निर्देशिका मौजूद नहीं है। सुनिश्चित करें कि यह मौजूद है क्योंकि openआपके लिए वे डायर नहीं बनाए जाएंगे।

मैं थोड़ी देर पहले खुद ही इसमें भाग गया।


11

File.newऔर सुरक्षा File.openमोड के रूप में पढ़ने के लिए डिफ़ॉल्ट ( 'r') सुरक्षा तंत्र के रूप में, संभवतः किसी फ़ाइल को ओवरराइट करने से बचने के लिए। 'w'यदि हम फ़ाइल में आउटपुट करने जा रहे हैं तो हमें रूबी को राइट मोड ( यह सबसे सामान्य तरीका है) का उपयोग करने के लिए स्पष्ट रूप से बताना होगा ।

यदि टेक्स्ट आउटपुट होता है तो लिखने के बजाय एक स्ट्रिंग है:

File.open('foo.txt', 'w') { |fo| fo.puts "bar" }

या खराब:

fo = File.open('foo.txt', 'w')
fo.puts "bar"
fo.close

अधिक रसीला का उपयोग करें write:

File.write('foo.txt', 'bar')

writeमोड अनुमति दी गई है तो हम उपयोग कर सकते हैं 'w', 'a', 'r+'यदि आवश्यक हो तो।

openएक ब्लॉक के साथ उपयोगी है अगर आपको पुनरावृत्त लूप में आउटपुट की गणना करना है और ऐसा करने पर फ़ाइल को खुला छोड़ना है। writeउपयोगी है यदि आप एक विस्फोट में सामग्री का उत्पादन करने जा रहे हैं तो फ़ाइल बंद करें।

अधिक जानकारी के लिए दस्तावेज़ देखें ।


शानदार प्रतिक्रिया, यह सबसे मुहावरेदार और इस तरह "रूबिस्ट" तरीका है। शीर्ष उत्तर होना चाहिए।
गीनो

खैर, मैं सहमत हूं। मैं फ़ाइलों को लिखने के लिए शायद ही कभी ब्लॉक फॉर्म का उपयोग करता हूं। यह बहुत नेत्रहीन है।
टिन मैन

11

यदि उद्देश्य केवल एक फ़ाइल बनाने के लिए है, तो मुझे जो सबसे प्रत्यक्ष तरीका दिखाई देता है वह है:

 FileUtils.touch "foobar.txt"

1
data = 'data you want inside the file'.

आप उपयोग कर सकते हैं File.write('name of file here', data)


0

आप अपने इच्छित मोड को निर्दिष्ट करने के लिए स्ट्रिंग्स के बजाय स्थिरांक का उपयोग कर सकते हैं। लाभ यह है कि यदि आप एक निरंतर नाम में एक टाइपो बनाते हैं, तो आपका कार्यक्रम एक रनटाइम अपवाद को बढ़ाएगा।

स्थिरांक हैं File::RDONLYया File::WRONLYया File::CREAT। आप चाहें तो इन्हें मिला भी सकते हैं।

Ruby-doc.org पर फ़ाइल ओपन मोड का पूरा विवरण

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.