नोडज को पूर्ण पथ से फ़ाइल नाम मिलता है?


289

अगर कोई API किसी फ़ाइल फ़ाइल पथ से फ़ाइल का नाम पुनः प्राप्त कर सकता है?

जैसे "foo.txt"से"/var/www/foo.txt"

मुझे पता है कि यह स्ट्रिंग ऑपरेशन के साथ काम करता है, जैसे कि fullpath.replace(/.+\//, '') लेकिन मैं जानना चाहता हूं कि एक और 'औपचारिक' तरीका है, जैसे file.getName()जावा में, यह कर सकता है।

NodeJS को पूर्ण पथ से फ़ाइल नाम मिलता है?

जवाबों:


542

मॉड्यूल की basenameविधि का उपयोग करें path:

path.basename('/foo/bar/baz/asdf/quux.html')
// returns
'quux.html'

यहाँ प्रलेखन ऊपर उदाहरण से लिया गया है।


108
यदि आप भी एक्सटेंशन को हटाना चाहते हैं:path.basename(fpath, path.extname(fpath))
वायलन फ्लिन

33

फ़ाइल नाम का फ़ाइल नाम भाग प्राप्त करने के लिए, बेसन विधि का उपयोग किया जाता है:

var path = require("path");
var fileName = "C:\\Python27\\ArcGIS10.2\\python.exe";
var file = path.basename(fileName);

console.log(file); // 'python.exe'

यदि आप एक्सटेंशन के बिना फ़ाइल नाम चाहते हैं, तो आप एक्सटेंशन चर (एक्सटेंशन नाम युक्त) को बेसनेम विधि में पास कर सकते हैं, जिसमें नोड को एक्सटेंशन के बिना केवल नाम वापस करने के लिए कहा गया है:

var path = require("path");
var fileName = "C:\\Python27\\ArcGIS10.2\\python.exe";
var extension = path.extname(fileName);
var file = path.basename(fileName,extension);

console.log(file); // 'python'


4

यदि आप पहले से ही जानते हैं कि पथ विभाजक है /(यानी आप एक विशिष्ट मंच / वातावरण के लिए लिख रहे हैं), जैसा कि आपके प्रश्न में उदाहरण के द्वारा निहित है, तो आप इसे सरल रख सकते हैं और विभाजक द्वारा स्ट्रिंग को विभाजित कर सकते हैं:

'/foo/bar/baz/asdf/quux.html'.split('/').pop()

यह नियमित अभिव्यक्ति द्वारा प्रतिस्थापित करने की तुलना में तेज़ (और क्लीनर इमो) होगा।

फिर से: ऐसा केवल तभी करें जब आप किसी विशिष्ट वातावरण के लिए लिख रहे हों, अन्यथा pathमॉड्यूल का उपयोग करें , क्योंकि पथ आश्चर्यजनक रूप से जटिल हैं। उदाहरण के लिए, विंडोज /कई मामलों में समर्थन करता है, लेकिन उदाहरण के लिए साझा नेटवर्क फ़ोल्डर और पसंद के लिए उपयोग की जाने वाली शैली उपसर्ग नहीं\\?\? । विंडोज पर उपरोक्त विधि को विफल करने के लिए, जल्दी या बाद में।


1
विंडोज के पास फ़ोल्डर विभाजक के रूप में
ओमेगा आईमैजिक

1
@OwnageIsMagic, यही कारण है कि मैं लिखता हूं "यदि आप पहले से जानते हैं कि पथ विभाजक है /" ... :)
leo

1
यह स्पष्ट नहीं है कि आपके इस कथन का क्या मतलब है। यह प्लेटफ़ॉर्म आश्रित कोड का उत्पादन करता है जो अन्य प्लेटफार्मों पर चुपचाप विफल हो जाएगा
ओमेगाआईमैजिक

@OwnageIsMagic हां, यह वास्तव में करता है। यदि आप किसी विशिष्ट प्लेटफ़ॉर्म के लिए नहीं लिख रहे हैं, तो हमेशा पथ मॉड्यूल के तरीकों का उपयोग करें।
leo

विंडोज़ वास्तव में फ़ोल्डर
सेपरेटर

3
var path = require("path");
var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";
var name = path.parse(filepath).name;

यदि आपको एक्स्टेंशन उपयोग के साथ नाम की आवश्यकता है, तो आप एक्सटेंशन के बिना फ़ाइल का नाम देते हैं

var path = require("path");
var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";
var name = path.basename(filepath);

0

NodeJS में, __filename.split (/ \ / //) पॉप () किसी भी OS प्लेटफ़ॉर्म पर निरपेक्ष फ़ाइल पथ से बस फ़ाइल का नाम देता है। एक एपीआई को याद रखने / आयात करने के बारे में परवाह करने की आवश्यकता क्यों है जबकि यह regex दृष्टिकोण हमें हमारे regex कौशल को याद करने देता है।


1
कृपया अपना उत्तर विस्तृत करें।
ट्रांसजेंसी के लिए जे जे और

0

इसलिए Nodejs डिफ़ॉल्ट ग्लोबल वैरिएबल के साथ आता है जिसे कहा जाता है '__fileName'कि वर्तमान फ़ाइल को निष्पादित किया जा रहा है। मेरी सलाह है कि किसी भी फाइल से सेवा के लिए __fileName पास करें, ताकि फाइलनाम की पुनर्प्राप्ति को गतिशील बनाया जाए

नीचे, मैं फ़ाइलनाम स्ट्रिंग का उपयोग करता हूं और फिर इसके आधार पर विभाजित करता हूं path.sep। नोट path.sep पॉज़िक्स फ़ाइल सेपरेटर और विंडोज़ फ़ाइल सेपरेटर ('/' और '\' के साथ समस्याएँ) के साथ समस्याओं से बचा जाता है। यह बहुत क्लीनर है। सबस्ट्रिंग प्राप्त करना और केवल अंतिम अलग नाम प्राप्त करना और इसे 3 से एक्टुलाल लंबाई के साथ घटाना।

आप इस तरह की सेवा लिख ​​सकते हैं (नोट यह टाइपस्क्रिप्ट में है, लेकिन आप इसे बहुत अच्छी तरह से js में लिख सकते हैं)

export class AppLoggingConstants {

    constructor(){

    }
      // Here make sure the fileName param is actually '__fileName'
    getDefaultMedata(fileName: string, methodName: string) {
        const appName = APP_NAME;
        const actualFileName = fileName.substring(fileName.lastIndexOf(path.sep)+1, fileName.length - 3);
        //const actualFileName = fileName;
     return appName+ ' -- '+actualFileName;
    }


}

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