2011-07-04 11 views
39

मैंने अपनी विन 7 मशीन पर रुबी 1.9.2 इंस्टॉल किया। एक साधारण analyzer.rb फ़ाइल बनाई गई।रुबी की फाइल.ऑपेन "ऐसी कोई फ़ाइल या निर्देशिका नहीं - text.txt (Errno :: ENOENT)" त्रुटि

File.open("text.txt").each {|line| puts line} 

जब मैं कोड चलाने के लिए, यह मुझे इस त्रुटि देता है:

analyzer.rb:1:in `initialize': No such file or directory - text.txt (Errno::ENOENT) 
from analyzer.rb:1:in `open' 
from analyzer.rb:1:in `<main>' 
Exit code: 1 

मैं इसे नहीं मिलता है यह इस एक पंक्ति है। analyzer.rb फ़ाइल के समान निर्देशिका में text.txt फ़ाइल है। मैंने फ़ाइल के पूर्ण पथ को खिलाने का भी प्रयास किया, C:\Ruby192\text.txt, लेकिन कोई पासा नहीं। मैं क्या खो रहा हूँ?

उत्तर

62

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

puts Dir.pwd

यह आपको बताएगा कि वर्तमान कार्यशील निर्देशिका रूबी आपकी स्क्रिप्ट चला रही है। आप सबसे अधिक संभावना देखेंगे कि यह वह जगह नहीं है जहां आप मानते हैं। फिर सुनिश्चित करें कि आप विंडोज़ के लिए पथनाम निर्दिष्ट कर रहे हैं। कैसे ठीक खिड़कियों के लिए pathnames फ़ॉर्मेट करने के लिए यहाँ डॉक्स देखें:

http://www.ruby-doc.org/core/classes/IO.html

तो या तो Dir.chdir का उपयोग के अनुसार फाइल करने के लिए जगह है जहाँ text.txt है के लिए काम कर निर्देशिका बदलने के लिए, या निर्दिष्ट करने के लिए पूर्ण पथ नाम उपरोक्त आईओ दस्तावेज़ों में निर्देश। यही कारण है कि यह करना चाहिए ...

संपादित

एक 3 समाधान सबसे सुविधाजनक एक हो सकता है जो, अगर आप अपने स्क्रिप्ट फ़ाइलें के बीच पाठ फ़ाइलें डाल रहे हैं जोड़ना:

Dir.chdir(File.dirname(__FILE__)) 

यह स्वचालित रूप से वर्तमान कार्य निर्देशिका को उसी निर्देशिका में बदल देगा जो .rb फ़ाइल है जो स्क्रिप्ट चला रहा है।

+0

में सुझाया गया था Dir.pwd चाल चल रही थी। यह सी: \ Ruby192 पर देख रहा था, जबकि मैं पाठ फ़ाइल को C: \ Ruby192 \ bin में डाल रहा था। एक बार जब मैंने इसे सही स्थान पर रखा, तो यह एक आकर्षण की तरह काम करता था। धन्यवाद! –

+3

@enraged ऊंट: आपको आम तौर पर वहां टेक्स्ट फाइलों को नहीं डालना चाहिए। जितना अधिक आप फाइलों के साथ मिलते हैं, उतनी अधिक संभावना है कि आप कुछ ऐसी चीज को हटाने जा रहे हैं जो आपको नहीं करना चाहिए। –

+0

धन्यवाद! नागोस के साथ एक ही समस्या थी पृष्ठभूमि में रूबी लिपि ... 'Dir.chdir' चाल चल रहा था! – Arpit

13

ENOENT का मतलब है कि यह वहां नहीं है।

बस लिए अपना कोड अपडेट:

File.open(File.dirname(__FILE__) + '/text.txt').each {|line| puts line} 
+0

आप अपनी प्रतिक्रिया के लिए धन्यवाद खोल सकते हैं। हालांकि यह मदद करने के लिए प्रतीत नहीं होता था। अभी भी एक ही त्रुटि हो रही है, भले ही text.txt रूबी स्थापना निर्देशिका में मौजूद है .rb फ़ाइल के ठीक आगे। कुछ संभावित कारण क्या हैं जो इसे नहीं ढूंढ रहे हैं? –

+0

असल में सबसे अच्छा समाधान 'Dir.chdir (File.dirname (__ FILE __)) हो सकता है। इस तरह आप गारंटी देंगे कि कामकाजी निर्देशिका स्क्रिप्ट के समान ही है। – Casper

+0

आप 'File.open (File.expand_path (__ FILE__, '... का भी उपयोग कर सकते हैं जैसा कि https://github.com/travis-ci/travis-ci/issues/4656#issuecomment-131212402 –

2

Dir.glob(".") 

का उपयोग कर क्या निर्देशिका में है (और इसलिए क्या निर्देशिका इसे देख रहा है) को देखने के लिए प्रयास करें।

2

गलत निर्देशिका में किया जा रहा करने के लिए अगला मैं सिर्फ एक और संस्करण के बारे में फिसल गया:

मैं एक File.open(my_file).each {|line| puts line} था विस्फोट लेकिन वहाँ निर्देशिका मैं में काम कर रहा था में कुछ है कि नाम से था (कमांड लाइन में ls नाम से पता चला)। मैंने File.exists?(my_file) के साथ चेक किया जो अजीब तरह से false लौटा। स्पष्टीकरण: my_file एक सिम्लिंक था जिसका लक्ष्य अब अस्तित्व में नहीं था! चूंकि File.exists? एक सिम्लिंक का पालन करेगा, यह false कहेंगे हालांकि लिंक अभी भी वहां है।

4

STDIN साथ chomp() या chomp() का उपयोग करें

यानी test1.rb

print 'Enter File name: ' 

fname = STDIN.gets.chomp() # or fname = gets.chomp() 


fname_read = File.open(fname) 

puts fname_read.read() 
1

डिट्टो कैस्पर के जवाब:

puts Dir.pwd 

जैसे ही आप वर्तमान कार्यशील निर्देशिका पता है, फ़ाइल पथ निर्दिष्ट अपेक्षाकृत उस निर्देशिका के लिए।

उदाहरण के लिए, यदि आपके कार्यशील निर्देशिका परियोजना जड़ है, तो आप एक फ़ाइल इसके तहत सीधे इस तरह

json_file = File.read(myfile.json) 
संबंधित मुद्दे