मैं जावास्क्रिप्ट में कैसे बता सकता हूं कि ओएस में जहां स्क्रिप्ट चल रही है वहां कौन सा पथ विभाजक उपयोग किया जाता है?
मैं जावास्क्रिप्ट में कैसे बता सकता हूं कि ओएस में जहां स्क्रिप्ट चल रही है वहां कौन सा पथ विभाजक उपयोग किया जाता है?
जवाबों:
अफेयर आप हमेशा एक पथ विभाजक के रूप में उपयोग कर सकते हैं, यहां तक कि विंडोज पर भी।
Http://bytes.com/forum/thread23123.html से उद्धरण :
इसलिए, स्थिति को सरल रूप से अभिव्यक्त किया जा सकता है:
डॉस 2.0 के बाद से सभी डॉस सेवाएं और सभी विंडोज एपीआई या तो आगे स्लैश या बैकस्लैश स्वीकार करते हैं। हमेशा होना चाहिए।
मानक कमांड शेल (CMD या COMMAND) में से कोई भी आगे की स्लैश को स्वीकार नहीं करेगा। यहां तक कि पिछली पोस्ट में दिए गए "cd ./tmp" उदाहरण विफल रहता है।
प्लेटफ़ॉर्म-विशिष्ट फ़ाइल विभाजक path
को node.js
रिटर्न में मॉड्यूल का उपयोग करें ।
उदाहरण
path.sep // on *nix evaluates to a string equal to "/"
संपादित करें: नीचे दिए गए सेबास की टिप्पणी के अनुसार, इसका उपयोग करने के लिए, आपको इसे अपने जेएस फ़ाइल के शीर्ष पर जोड़ना होगा:
const path = require('path')
path.sep
सुधार सकते हैं कि :।
const path = require('path');
हाँ सभी OS की CD ../ या CD .. \ या CD .. स्वीकार करते हैं, भले ही आप विभाजकों में कैसे भी हों। लेकिन एक रास्ता पढ़ने के बारे में क्या। यदि आप कहते हैं कि कैसे पता चलेगा, एक 'विंडोज़' पथ, के साथ ' '
और \
अनुमति दी।
जब आप पर निर्भर करते हैं तो क्या होता है, उदाहरण के लिए, इंस्टॉलेशन डायरेक्टरी %PROGRAM_FILES% (x86)\Notepad++
। निम्नलिखित उदाहरण लें।
var fs = require('fs'); // file system module
var targetDir = 'C:\Program Files (x86)\Notepad++'; // target installer dir
// read all files in the directory
fs.readdir(targetDir, function(err, files) {
if(!err){
for(var i = 0; i < files.length; ++i){
var currFile = files[i];
console.log(currFile);
// ex output: 'C:\Program Files (x86)\Notepad++\notepad++.exe'
// attempt to print the parent directory of currFile
var fileDir = getDir(currFile);
console.log(fileDir);
// output is empty string, ''...what!?
}
}
});
function getDir(filePath){
if(filePath !== '' && filePath != null){
// this will fail on Windows, and work on Others
return filePath.substring(0, filePath.lastIndexOf('/') + 1);
}
}
targetDir
सूचकांक के बीच सबस्ट्रिंग तक स्थापित किया जा रहा है 0
, और 0
( indexOf('/')
है -1
में C:\Program Files\Notepad\Notepad++.exe
), खाली स्ट्रिंग में जिसके परिणामस्वरूप।
इसमें निम्न पोस्ट के कोड शामिल हैं: मैं Node.js के साथ वर्तमान ऑपरेटिंग सिस्टम का निर्धारण कैसे करूं
myGlobals = { isWin: false, isOsX:false, isNix:false };
OS का सर्वर साइड डिटेक्शन।
// this var could likely a global or available to all parts of your app
if(/^win/.test(process.platform)) { myGlobals.isWin=true; }
else if(process.platform === 'darwin'){ myGlobals.isOsX=true; }
else if(process.platform === 'linux') { myGlobals.isNix=true; }
OS का ब्राउज़र साइड डिटेक्शन
var appVer = navigator.appVersion;
if (appVer.indexOf("Win")!=-1) myGlobals.isWin = true;
else if (appVer.indexOf("Mac")!=-1) myGlobals.isOsX = true;
else if (appVer.indexOf("X11")!=-1) myGlobals.isNix = true;
else if (appVer.indexOf("Linux")!=-1) myGlobals.isNix = true;
विभाजक प्राप्त करने के लिए हेल्पर फंक्शन
function getPathSeparator(){
if(myGlobals.isWin){
return '\\';
}
else if(myGlobals.isOsx || myGlobals.isNix){
return '/';
}
// default to *nix system.
return '/';
}
// modifying our getDir method from above...
अभिभावक निर्देशिका (क्रॉस प्लेटफॉर्म) पाने के लिए हेल्पर फंक्शन
function getDir(filePath){
if(filePath !== '' && filePath != null){
// this will fail on Windows, and work on Others
return filePath.substring(0, filePath.lastIndexOf(getPathSeparator()) + 1);
}
}
getDir()
यह जानने के लिए पर्याप्त बुद्धिमान होना चाहिए कि इसकी तलाश क्या है।
यदि उपयोगकर्ता कमांड लाइन, आदि के माध्यम से एक पथ इनपुट कर रहा है, तो आप वास्तव में भी धीमी और जांच कर सकते हैं।
// in the body of getDir() ...
var sepIndex = filePath.lastIndexOf('/');
if(sepIndex == -1){
sepIndex = filePath.lastIndexOf('\\');
}
// include the trailing separator
return filePath.substring(0, sepIndex+1);
आप ऊपर बताए अनुसार 'पाथ' मॉड्यूल और path.sep का भी उपयोग कर सकते हैं, यदि आप किसी कार्य को इस सरल तरीके से करने के लिए किसी मॉड्यूल को लोड करना चाहते हैं। व्यक्तिगत रूप से, मुझे लगता है कि केवल उस प्रक्रिया से जानकारी की जांच करना पर्याप्त है जो आपके पास पहले से उपलब्ध है।
var path = require('path');
var fileSep = path.sep; // returns '\\' on windows, '/' on *nix
NodeJS
टैग की कमी को देखते हुए - आपने सर्वर और क्लाइंट दोनों के लिए जवाब दिया है । आपका जवाब पूरी तरह से - और वास्तव में - सवाल का जवाब देता है। नोड के लिए, मुझे लगता है कि पथ मॉड्यूल ठीक है, क्योंकि यह उत्पन्न बायोटेक प्रदर्शन को प्रभावित नहीं करेगा और पठनीयता (एक एकल आयात विवरण) को प्रभावित नहीं करना चाहिए। हालाँकि, आप क्लाइंट-साइड का एकमात्र उत्तर हैं। यह स्वीकार किया जाना चाहिए।
जैसा कि पहले ही यहां उत्तर दिया गया है, आप path.join
अपने पथ को मैन्युअल रूप से बनाने के लिए ओएस विशिष्ट पथ विभाजक पा सकते हैं । लेकिन आप path.join
उस काम को करने दे सकते हैं , जो पथ निर्माण से निपटने के दौरान मेरा पसंदीदा समाधान है:
उदाहरण:
const path = require('path');
const directory = 'logs';
const file = 'data.json';
const path1 = `${directory}${path.sep}${file}`;
const path2 = path.join(directory, file);
console.log(path1); // Shows "logs\data.json" on Windows
console.log(path2); // Also shows "logs\data.json" on Windows
बस "/" का उपयोग करें, यह सभी ओएस पर काम करता है जहां तक मुझे पता है।
determine
, हर जगह काम करने वाला ऑपरेटर नहीं है :-)