Wie kann ich in JavaScript feststellen, welches Pfadtrennzeichen in dem Betriebssystem verwendet wird, in dem das Skript ausgeführt wird?
javascript
file
directory
Stich
quelle
quelle
Antworten:
Sie können / auch unter Windows immer als Pfadtrennzeichen verwenden.
Zitat aus http://bytes.com/forum/thread23123.html :
quelle
Verwendung
path
Modul innode.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')
quelle
path.sep
Sie angeben , wie : .const path = require('path');
Die richtige Antwort
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.Das offensichtliche "Duh!" Frage
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); } }
Was ist passiert!?
targetDir
wird auf einen Teilstring zwischen den Indizes gesetzt0
und0
(indexOf('/')
ist-1
inC:\Program Files\Notepad\Notepad++.exe
), was zu der leeren Zeichenfolge führt.Die Lösung...
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
Und das ist alles Leute!
quelle
Verwenden Sie einfach "/", es funktioniert meines Wissens auf allen Betriebssystemen.
quelle
determine
, nicht was der Operator ist, der überall funktioniert :-)