2013-08-20 9 views
6

मेरे नोड.जेएस ऐप में मेरे पास ऐसे कार्य हैं जिन्हेंNODE.JS - ओएस और यूआरएल-शैली "पथ" के मिश्रण को सही तरीके से कैसे संभालें?

ओएस-शैली पथ उदा। c: \ my \ docs \ mydoc.doc (या /usr/docs/mydoc.doc या जो कुछ भी स्थानीय है)

फ़ाइल यूआरएल उदा। फ़ाइल: // c: /my/docs/mydoc.doc (जो मुझे '\' s की वैधता के बारे में निश्चित नहीं है ??

किसी भी तरह से, मुझे यह देखने की ज़रूरत है कि क्या वे संदर्भित करते हैं या नहीं एक विशिष्ट स्थान जो हमेशा स्थानीय ओएस-शैली पथ के रूप में मौजूद होगा उदाहरण के लिए c: \ mydata \ directory \ या/usr/mydata/निर्देशिका

स्पष्ट रूप से ओएस-शैली पथों के लिए मैं उन्हें स्ट्रिंग के रूप में तुलना कर सकता हूं - उन्हें हमेशा समान होना चाहिए (वे पथ के साथ बनाए गए हैं) लेकिन फ़ाइल:// URLS जरूरी नहीं है path.sep का उपयोग करें और इसलिए "स्ट्रिंग मैच" नहीं होगा?

(इस संभाल करने के लिए सबसे अच्छा तरीका है मैं व्यक्तिगत रूप से या तो एक तरह से एक या अधिक स्लैश द्वारा सब कुछ तोड़ने के लिए और उसके बाद जाँच प्रत्येक टुकड़ा ??

+0

पथ देखें (http://nodejs.org/api/path.html)। इससे आपकी मदद करनी चाहिए। – fakewaffle

+0

मैं पहले से ही पथ का उपयोग कर रहा हूं - समस्या यह है कि यह वास्तव में फ़ाइल जैसे यूआरएल को समझ में नहीं आता है // // और विभाजक आवश्यक रूप से ओएस से मेल नहीं खाएगा !? – shrewdlogarithm

+0

कुछ नोडजेस कोड (लिनक्स के तहत विकसित) का उपयोग करके (विंडोज़ के तहत), मैं * * * और "\" दोनों के साथ * उसी * फ़ाइल पथ में घायल हो जाता हूं! – Fuhrmanator

उत्तर

0

बस के कुछ हेरफेर कर परीक्षा कर रहा हूँ के रूप में कोई सुझाव

var path = require('path'); 
var pathname = "\\usr\\home\\newbeb01\\Desktop\\testinput.txt"; 
var pathname2 = "file://usr/home/newbeb01/Desktop/testinput.txt" 

if(PreparePathNameForComparing(pathname) == PreparePathNameForComparing(pathname2)) 
{ console.log("Same path"); } 
else 
{ console.log("Not the same path"); } 

function PreparePathNameForComparing(pathname) 
{ 
    var returnString = pathname; 
    //try to find the file uri prefix, if there strip it off 
    if(pathname.search("file://") != -1 || pathname.search("FILE://") != -1) 
    { returnString = pathname.substring(6, pathname.length); } 

    //now make all slashes the same 
    if(path.sep === '\\') //replace all '/' with '\\' 
    { returnString = returnString.replace(/\//g, '\\'); } 
    else //replace all '\\' with '/' 
    { returnString = returnString.replace(/\\/g, '/'); } 

    return returnString; 
} 

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

+0

यह मेरी तरह की चीज है - केवल समस्या यह है कि मुझे विश्वास नहीं है कि फ़ाइल: // यूआरएल में 'या' दोनों का मिश्रण नहीं होगा (मैं केवल क्रोम में वास्तव में रूचि रखता हूं लेकिन मुझे पता है कि कुछ ब्राउज़र दोनों/मिश्रित समर्थन करते हैं)? इसलिए मैं सभी विभाजकों को फेंकने और बाकी की तुलना करने के लिए क्यों लुभाना चाहता था !? – shrewdlogarithm

+0

यदि आप उन्हें कुछ पागल मिश्रणों के बावजूद सभी को समान बनाना चाहते हैं, तो आप उन्हें सभी को या "" या कुछ ऐसा बदल सकते हैं। आप इसे निम्न के साथ कर सकते हैं: returnString = returnString (/ [\\ /] + /, ","); जो '' 'और'/'को एकल या गुणों में', 'के साथ बदल देगा, इसलिए आपको अब उनके बारे में चिंता करने की ज़रूरत नहीं है। बस मेरे फ़ंक्शन में अगर और उसके बजाय उस कोड का उपयोग करें और आपको वह चीज़ मिलनी चाहिए जो आप खोज रहे हैं। – Brian

+0

मैंने इसे स्वीकार कर लिया क्योंकि इसमें संक्षेप में सही उत्तर है। मेरा अन्य समाधान पथ की क्षमताओं का "शोषण" करता है - यह वह है जिसका मैं उपयोग कर रहा हूं लेकिन भविष्य के आगंतुकों के लिए समाधान समान है - बस प्रोटोकॉल को हटाएं (फ़ाइल: //) और फिर स्थानीय पथ में सभी संभावित स्लैश बदलें .sep ... – shrewdlogarithm

7

मैं इस पर अपना खुद का लेना चाहता हूं - क्योंकि यह किसी सुझाव से आया है कि मुझे फेसबुक पर किसी से मिला है (नहीं - वास्तव में!) और यह उस तरीके से पथ का उपयोग करता है जिसकी शायद इसका उद्देश्य नहीं था - उदा। मुझे यकीन नहीं है कि यह सही 'समाधान' है - मुझे यकीन नहीं है कि मैं पथ का थोड़ा सा शोषण नहीं कर रहा हूं।

फेसबुक टिप यह थी कि पथ वास्तव में "/" और "\" विभाजक के साथ तारों को सौंपने के लिए एक उपयोगिता है - यह सब कुछ अनदेखा करता है - इसमें परवाह नहीं है कि इसमें क्या है।

उस आधार पर, हम

path.normalize(ourpath) 

उपयोग कर सकते हैं जो (स्थानीय ओएस को प्राथमिकता वाले (path.sep)

करने के लिए सभी विभाजक में परिवर्तित कर देंगे इसका मतलब है कि वे मेरी ओएस शैली निर्देशिका से मेल खाएगा जो भी है पथ के साथ बनाया गया) और इसलिए मैं उन लोगों की तुलना कर सकता हूं - मैन्युअल रूप से गड़बड़ाने के बिना स्लैश का उपयोग किए बिना ...

उदा।

पहले

file://awkward/use/of\\slashes\in/this/path 

बाद

file:\awkward\use\of\slashes\in\this\path (Windows) 

या

file:/awkward/use/of/slashes/in/this/path (everywhere else) 

file:// से पहले निकाला जा रहा है (या file: + path.sep के बाद) = स्थानीय ओएस शैली पथ !?

+0

मेरे लिए काम करता है! और यही कारण है कि सभी अंतर्निहित नोड फ़ंक्शंस सी: \ जो भी \ और/फिर/unix/slashes.txt जैसे पथों की परवाह नहीं करते हैं –

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