2012-02-03 12 views
11

मैं लंबे समय से इस से निपट रहा हूं, इसलिए किसी भी मदद की बहुत सराहना की जाती है। इसलिए, मैं एक फाइल डाउनलोड कर रहा हूं और इसे फैंटॉमजेएस और कैस्परजेएस का उपयोग करके सहेज रहा हूं। मुझे बताएं कि वे मुद्दे नहीं हैं। फ़ाइल बिना किसी समस्या के डाउनलोड की जाती है।नोडजेएस fs.open मौजूदा फ़ाइल (पथ पथ नहीं) पर असफल रहा

समस्या यह है कि नोडजेएस डाउनलोड होने के बाद फ़ाइल को पहचान या खोल नहीं पाएगा। मैं fs.stat नहीं कर सकता, fs.open, आदि .. कुछ भी काम नहीं करता है।

Here: bdTcK6hSdownload.csv 

[ '2puzZMeLdownload.csv', 
    '2s5ICbKNdownload.csv', 
    'bdTcK6hSdownload.csv', 
    'izIfagwCdownload.csv' ] 

fs.js:230 

return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); 

Error: ENOENT, no such file or directory './caspertemp/bdTcK6hSdownload.csv' 

at Object.openSync (fs.js:230:18) 
at Object.processCSV (/Users/Home/dev/node_modules/inviter/index.js:64:29) 
at /Users/Home/dev/node_modules/inviter/index.js:36:33 
at ChildProcess.exithandler (child_process.js:281:7) 
at ChildProcess.emit (events.js:70:17) 
at maybeExit (child_process.js:361:16) 
at Process.onexit (child_process.js:397:5) 

आप देख सकते हैं, मैं बनाया फ़ाइल नाम को प्रिंट कर रहा हूँ, तो निर्देशिका की सामग्री और उसके बाद मुद्रण:

मैं एक सेकंड में कोड यहाँ का हिस्सा होगा, लेकिन लॉग है फ़ाइल खोलने की कोशिश कर रहा है। जैसा कि आप देख सकते हैं, निर्देशिका में bdTcK6hSdownload.csv मौजूद है लेकिन खुले में विफल रहता है।

सरल कोड का टुकड़ा यहाँ है:

console.log('Here: ' + filename); 

filenames = fs.readdirSync('./caspertemp/'); 
console.log(filenames); 

var fd = fs.openSync('./caspertemp/' + filename, 'r'); 
console.log(fd); 

एक गुच्छा अधिक से पहले और इस के बाद हो रहा है, लेकिन यह से कोई भी मायने रखती है क्योंकि यह मूल कार्य विफल रहता है। कृपया सहायता कीजिए! यह हफ्तों के लिए घबरा गया है।

+1

हम्म। क्या आपने अनुमतियां जांच ली हैं? इसके अलावा, node.js चलाएं इस तरह: स्ट्रेस ./node - यह सभी सिस्टम कॉल का पता लगाएगा और आप एक खुले() की तलाश कर रहे हैं, पथ नोड का उपयोग कर रहे हैं, आदि। यह आपको बताएगा कि नोड प्रक्रिया वास्तव में क्या कर रही है। – EdH

+0

@EdH अनुमतियों के लिए हाँ। सभी फाइलों में एक ही अनुमति है: '-rw-r - r-- 1 होम स्टाफ 216102 फरवरी 3 15:00 बीडीटीसीके 6hSdownload.csv' यह भी ध्यान देने योग्य है कि अगर मैं नोड को पुनरारंभ करता हूं तो मैं कर सकता हूं किसी समस्या के बिना फ़ाइल तक पहुंचें। – Brandon

+0

@ EdH.Hmm, मैं किसी कारण से स्ट्रेस मोड में नहीं चला सकता: mac: dev होम $ strace -fF -o strace.lo g node app.js -bash: strace: आदेश नहीं मिला - सुनिश्चित नहीं है कि मैं उस आदेश के साथ क्या गलत कर रहा हूं – Brandon

उत्तर

3

मेरा अनुमान है कि यह वर्तमान कार्यशील निर्देशिका में एक विसंगति है। क्या आप उसी निर्देशिका से casperJS और node.js प्रक्रियाओं को शुरू कर रहे हैं? क्या उनमें से कोई भी रनटाइम पर कार्यशील निर्देशिका बदलता है? इस है, जहां नोड के __dirname आप वर्तमान में क्रियान्वित .js फ़ाइल

var path = require("path"); 
var filename = "bdTcK6hSdownload.csv"; 
var csvPath = path.resolve(path.join(__dirname, "caspertemp", filename)); 
console.log(csvPath); 
+0

मैं विचारशील उत्तर और उदाहरण की सराहना करता हूं, लेकिन आप पोस्ट किए गए कोड से देख सकते हैं कि वे एक ही निर्देशिका लौट रहे हैं। Caspertemp रूट में है लेकिन कार्य निर्देशिका node_modules में है। उदाहरण के लिए, यदि मैं आपके कोड का उपयोग करता हूं और __dirname चर को हटा देता हूं, तो मुझे यह मिल रहा है: /Users/Home/dev/caspertemp/pwAA3Kzzdownload.csv ENOENT, ऐसी कोई फ़ाइल या निर्देशिका '/ उपयोगकर्ता/होम/dev/caspertemp /pwAA3Kzzdownload.csv – Brandon

0

एक और संभावना है समय है निर्देशिका पथ दे देंगे की तरह कुछ की कोशिश करो।

मेरे पास अतीत में ऐसी स्थितियां थीं जहां फ़ाइल में फ़ाइल प्रविष्टि तुरंत दिखाई देती है लेकिन फ़ाइल अनुपयोगी है क्योंकि यह लिखने वाली चीज़ या तो समाप्त नहीं हुई है या अभी तक इसे संभाल नहीं है। उन परिस्थितियों में प्रसंस्करण को स्थगित करने या चीजों को तैयार करने के लिए कुछ अन्य जांच करने की आवश्यकता नहीं है।

उन अवसरों पर यह हो सकता है कि एक 'पुन: प्रारंभ करें' चीजें पुन: प्रारंभ करें, लेकिन केवल इसलिए क्योंकि साइड इफेक्ट के रूप में यह या तो हैंडल या देरी प्रसंस्करण जारी करता है, इसलिए जब आपका कोड दोबारा ठीक हो जाता है तो यह ठीक है।

0

यह तब होता है जब आप गलत पथ दे रहे हैं। मैं एक ही समस्या में आया हूँ।

प्रारंभ में मैं सीधे फ़ाइल चला रहा था xyz.js और आवश्यक स्थैतिक फ़ाइलें एक ही भंडार में हैं। लेकिन जब मैं NPM शुरू करते हैं, कोड उपरोक्त त्रुटि फेंक दिया गया था:

fs.js 495 
    return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); 
    **Error: ENOENT, no such file or directory** 

तो मैं निश्चित संसाधनों, नाम पथ चले गए और यह काम किया। उम्मीद है कि यह आपकी मदद कर सकता है।

0

फ़ाइल एक्सटेंशन दो बार दर्ज नहीं किया जा सका इसलिए नहीं मिला। अपने कमांड प्रॉम्प्ट के साथ फाइल निर्देशिका पर नेविगेट करें और उस निर्देशिका में फ़ाइलों की सूची प्राप्त

आदेश:

dir 

या

ls 

वहाँ वास्तविक फ़ाइल नाम प्राप्त करें और इसका इस्तेमाल करते हैं। मेरे मामले में मैंने एक टेक्स्ट दस्तावेज़ को "readMe" के रूप में सहेजा था।txt "और कमांड प्रॉम्प्ट पर यह" readMe.txt.txt "के रूप में दिखाई दिया। मुझे सहेजते समय फ़ाइल एक्सटेंशन को जोड़ना नहीं था और इससे समस्या उत्पन्न हुई।

संबंधित मुद्दे