fs: मैं मूल फ़ोल्डर कैसे ढूँढूं?


193

फ़ाइल खोजने के लिए मैं इसे मूल 2 स्तरों पर वापस जाने के लिए कैसे लिखूं?

fs.readFile(__dirname + 'foo.bar');

जवाबों:


277

इसे इस्तेमाल करे:

fs.readFile(__dirname + '/../../foo.bar');

रिश्तेदार पथ की शुरुआत में आगे की स्लैश पर ध्यान दें।


25
मैं कोशिश कर रहा था कि कोई भाग्य न हो लेकिन मैंने बस किया fs.readFile(__dirname + '/../../foo.bar');और यह काम किया।
फैंसी

6
मैं तब मान रहा हूं कि __dirnameवह '/foo/bar'बदले की तरह कुछ कर रहा था '/foo/bar/'
एंड्रयू हरे

3
आपके पथ में बहुत पहले '/': '/../../foo.bar' महत्वपूर्ण है। मेरे पास '../../foo.bar' था जो मेरे मुद्दे का कारण बन रहा था।
लेविबोस्टियन 15

1
क्यों? बस आम तौर पर क्यों? क्या कोई समझा सकता है?
आंखों की रोशनी

@eyurdakul यदि मैं इसे स्पष्ट रूप से समझता हूं: __dirnameऐसा लग सकता है /path/to/your/dir, यदि आप कहते हैं कि __dirname + ".."यह ऐसा है /path/to/your/dir.., जो इसके बजाय एक अविशिष्ट निर्देशिका है /path/to/your। स्लैश महत्वपूर्ण है।
3

162

उपयोग path.join http://nodejs.org/docs/v0.4.10/api/path.html#path.join

var path = require("path"),
    fs = require("fs");

fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));

path.join() आप के लिए अग्रणी / अनुगामी स्लैश को संभालेगा और बस सही काम करेगा और आपको यह याद रखने की कोशिश करने की आवश्यकता नहीं है कि अनुगामी स्लैश मौजूद हैं और कब नहीं।


4
यह उत्तर path.joinसही तरीका है, स्वीकार किए गए उत्तर का पालन नहीं किया जाना चाहिए, यह यहां तक ​​कि ट्रिगर करता eslintहै airbnb-base preset, विशेष रूप से नियम नो-पाथ-
कॉनसैट

100 वाँ उत्थान। मेरी ज़रूरत __dirnameथी host/src/folderऔर मुझे इसकी ज़रूरत थी host/folderऔर यह मेरे लिए काम करता था, न कि ओपी का जवाब।
कर्कोद

8
आप इसे एक कदम आगे ले जा सकते हैं और कर सकते हैंpath.join(__dirname, '..', '..', 'foo.bar')
श्री कोई भी

धन्यवाद एलेक्स, आपने मुझे 6 घंटे की खोज के बाद बचाया,
SHOHIL SETHIA

95

मुझे पता है कि यह थोड़ा अचार है, लेकिन अब तक के सभी उत्तर बिल्कुल सही नहीं हैं।

Path.join () का मतलब यह है कि कॉल करने वाले को यह जानने के लिए कि कौन सी डायरेक्ट्री विभाजक का उपयोग करना है (कोड प्लेटफ़ॉर्म अज्ञेयवादी बनाना) की आवश्यकता को समाप्त करना।

तकनीकी रूप से सही उत्तर कुछ इस तरह होगा:

var path = require("path");

fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));

मैंने इसे एलेक्स वेन के जवाब के लिए एक टिप्पणी के रूप में जोड़ा होगा लेकिन अभी तक पर्याप्त प्रतिनिधि नहीं है!

EDIT: उपयोगकर्ता 1767586 के अवलोकन के अनुसार


4
'foo.bar' को 'foo.bar' होना चाहिए। मैंने एक संपादन करने की कोशिश की, लेकिन संपादन 6 अक्षरों का न्यूनतम होना चाहिए (बेवकूफ नियम यदि आप मुझसे पूछें, तो हमें इस तरह के छोटे टाइपो को संपादित करने से रोकता है)।
user1767586

1
मुझे संदेह है कि यह सबसे अच्छा जवाब है। कुछ अन्य उत्तर दिए गए ऑपरेटिंग सिस्टम पर किसी दिए गए व्यक्ति के लिए काम कर सकते हैं, लेकिन उन अन्य उत्तरों में एक विशिष्ट प्रकार की फ़ाइल पदानुक्रम विभाजक (यानी स्लैश) की उपस्थिति मुझे आश्चर्यचकित करती है कि वे कितने सार्वभौमिक हैं। उदाहरण के लिए, मैं एक मंच अज्ञेय तरीके से एक इलेक्ट्रॉन ऐप लिखने की कोशिश कर रहा हूं और, जबकि मैंने इसे आसानी से साबित नहीं किया है, मुझे संदेह है कि यह सबसे सुरक्षित तरीका है। धन्यवाद।
एंड्रयू विल्स

यह वास्तव में अनावश्यक है, क्योंकि path.join () आंतरिक रूप से path.normalize () का उपयोग करता है (जो सभी पथ विभाजक को वर्तमान / इच्छित OS प्रारूप में बदल देता है) लौटने से पहले परिणामी मार्ग में शामिल हो जाता है। यह चोट नहीं कर सकता है, हालांकि।
आयन सिप

55

उपयोग करने का सबसे आसान तरीका होगा path.resolve:

path.resolve(__dirname, '..', '..');

वास्तव में सही समाधान के रूप में आप ../पथ में शामिल होने से फ़ोल्डर को हल करने की आवश्यकता नहीं है
João Pimentel Ferreira

@ याँ क्या है '..' कहा जाता है?
गौरव



11

यदि कोई अन्य मॉड्यूल आपका कॉल करता है और आप अभी भी मुख्य फ़ाइल के स्थान को जानना चाहते हैं तो आप @ जेसन के कोड के संशोधन का उपयोग कर सकते हैं:

var path = require('path'),
    __parentDir = path.dirname(process.mainModule.filename);

fs.readFile(__parentDir + '/foo.bar');

इस तरह आपको वास्तव में चलाए जा रहे स्क्रिप्ट का स्थान मिल जाएगा।


8

यदि आप सकारात्मक नहीं हैं कि माता-पिता कहां हैं, तो यह आपको रास्ता देगा;

var path = require('path'),
    __parentDir = path.dirname(module.parent.filename);

fs.readFile(__parentDir + '/foo.bar');


2

मैं इलेक्ट्रॉन ऐप चला रहा हूं और मैं पथ फ़ोल्डर को प्राप्त कर सकता हूं।

माता-पिता 1 स्तर:path.resolve(__dirname, '..') + '/'

माता-पिता 2 स्तर:path.resolve(__dirname, '..', '..') + '/'


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