Wie kann ich in JavaScript feststellen, welches Pfadtrennzeichen in dem Betriebssystem verwendet wird, in dem das Skript ausgeführt wird?
Wie kann ich in JavaScript feststellen, welches Pfadtrennzeichen in dem Betriebssystem verwendet wird, in dem das Skript ausgeführt wird?
Antworten:
Sie können / auch unter Windows immer als Pfadtrennzeichen verwenden.
Zitat aus http://bytes.com/forum/thread23123.html :
Die Situation lässt sich also ziemlich einfach zusammenfassen:
Alle DOS-Dienste seit DOS 2.0 und alle Windows-APIs akzeptieren entweder Schrägstriche oder Schrägstriche. Immer haben.
Keine der Standardbefehls-Shells (CMD oder COMMAND) akzeptiert Schrägstriche. Sogar das Beispiel "cd ./tmp" aus einem früheren Beitrag schlägt fehl.
Verwendung path
Modul in node.js
kehrt die plattformspezifische Datei Separator.
Beispiel
path.sep // on *nix evaluates to a string equal to "/"
Bearbeiten: Gemäß dem Kommentar von Sebas unten müssen Sie dies oben in Ihrer js-Datei hinzufügen, um dies zu verwenden:
const path = require('path')
path.sep
Sie angeben , wie : .
const path = require('path');
Ja, alle Betriebssysteme akzeptieren CD ../ oder CD .. \ oder CD .. unabhängig davon, wie Sie Trennzeichen übergeben. Aber was ist mit einem Rückweg. Wie würden Sie wissen, ob es sich um einen "Windows" -Pfad handelt, mit ' '
und \
erlaubt.
Was passiert , wenn Sie sind abhängig von zum Beispiel das Installationsverzeichnis %PROGRAM_FILES% (x86)\Notepad++
. Nehmen Sie das folgende Beispiel.
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
wird auf einen Teilstring zwischen den Indizes gesetzt 0
und 0
( indexOf('/')
ist -1
in C:\Program Files\Notepad\Notepad++.exe
), was zu der leeren Zeichenfolge führt.
Dies beinhaltet Code aus dem folgenden Beitrag: Wie bestimme ich das aktuelle Betriebssystem mit Node.js.
myGlobals = { isWin: false, isOsX:false, isNix:false };
Serverseitige Erkennung des Betriebssystems.
// 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; }
Browserseitige Erkennung des Betriebssystems
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;
Hilfsfunktion zum Abrufen des Trennzeichens
function getPathSeparator(){
if(myGlobals.isWin){
return '\\';
}
else if(myGlobals.isOsx || myGlobals.isNix){
return '/';
}
// default to *nix system.
return '/';
}
// modifying our getDir method from above...
Hilfsfunktion zum Abrufen des übergeordneten Verzeichnisses (plattformübergreifend)
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()
muss intelligent genug sein, um zu wissen, wonach es sucht.
Sie können sogar richtig schlau werden und prüfen, ob der Benutzer einen Pfad über die Befehlszeile usw. eingibt.
// 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);
Sie können auch das Modul 'path' und path.sep wie oben angegeben verwenden, wenn Sie ein Modul laden möchten, um diese einfache Aufgabe auszuführen. Persönlich halte ich es für ausreichend, nur die Informationen aus dem Prozess zu überprüfen, die Ihnen bereits zur Verfügung stehen.
var path = require('path');
var fileSep = path.sep; // returns '\\' on windows, '/' on *nix
Verwenden Sie einfach "/", es funktioniert meines Wissens auf allen Betriebssystemen.
determine
, nicht was der Operator ist, der überall funktioniert :-)