Wie die OS Pfadseparator in JavaScript bestimmen?
-
02-07-2019 - |
Frage
Wie kann ich in JavaScript sagen, welches Pfadseparator in dem O verwendet wird, in dem das Skript runnning wird?
Lösung
AFAIR können Sie immer verwenden / als Pfadtrennzeichen, auch unter Windows.
Zitat von http://bytes.com/forum/thread23123.html :
So kann die Situation zusammenfassen eher einfach:
Alle DOS Dienste seit DOS 2.0 und alle Windows-APIs akzeptieren entweder vorwärts Slash oder Backslash. Immer hat.
Keine der Standardbefehl Schalen (CMD oder COMMAND) akzeptiert vorwärts zerschneidet. Selbst die „cd ./tmp“ -Beispiel in einem frühen Post gegeben ausfällt.
Andere Tipps
Verwenden path
Modul in node.js
gibt die plattformspezifische Datei Separator.
Beispiel
path.sep // on *nix evaluates to a string equal to "/"
Edit: Wie pro Sebas Kommentar unten, dies zu nutzen, müssen Sie dies Ihre js Datei oben hinzuzufügen:
const path = require('path')
Die richtige Antwort
Ja alle OS CD akzeptieren ../ oder CD .. \ oder CD .. unabhängig davon, wie Sie in Separatoren passieren. Aber was ist ein Weg zurück zu lesen. Wie würden Sie wissen, wenn ihr sagen wir, ein ‚Fenster‘ Weg, mit ' '
und \
erlaubt.
Die offensichtliche 'Duh!' Frage
Was passiert, wenn man davon ab, zum Beispiel des 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 Teil gesetzt zwischen dem Indizes 0
und 0
(indexOf('/')
wird -1
in C:\Program Files\Notepad\Notepad++.exe
), in dem leeren String ergibt.
Die Lösung ...
Dazu gehört Code aus dem folgenden Eintrag: Wie kann ich feststellen, das aktuelle Betriebssystem mit Node.js
myGlobals = { isWin: false, isOsX:false, isNix:false };
Server-Seite-Erkennung von 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; }
Browser Seite Erkennung von 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;
Helper Funktion den Separator bekommen
function getPathSeparator(){
if(myGlobals.isWin){
return '\\';
}
else if(myGlobals.isOsx || myGlobals.isNix){
return '/';
}
// default to *nix system.
return '/';
}
// modifying our getDir method from above...
Helper Funktion das übergeordnete Verzeichnis (Cross-Plattform)
bekommenfunction getDir(filePath){
if(filePath !== '' && filePath != null){
// this will fail on Windows, and work on Others
return filePath.substring(0, filePath.lastIndexOf(getPathSeparator()) + 1);
}
}
getDir()
muß intelligent genug, um zu wissen, welche seine Suche.
können Sie erhalten auch wirklich glatt und prüfen, ob beide, wenn der Benutzer einen Pfad über die Kommandozeile eingibt, etc.
// 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 ‚Pfad‘ Modul und path.sep verwenden, wie oben erwähnt, wenn Sie ein Modul zu tun, um diese einfach von einer Aufgabe laden mögen. Ich persönlich denke, es ausreichend, nur die Informationen zu überprüfen, aus dem Prozess, den Sie bereits zur Verfügung steht.
var path = require('path');
var fileSep = path.sep; // returns '\\' on windows, '/' on *nix
und das ist alles Folks!
VVS Antwort richtig ist, mit Ausnahme der einen Pfad durch eine Datei-Eingabe im Internet Explorer gegeben Parsen (mit IE8 getestet - ich weiß nicht, über andere Versionen). In diesem Fall, da der Weg durch das Wert (input.value) des Eingangselementes ist in der Form "C: \ fakepath \
Verwenden Sie einfach „/“, es funktioniert auf allen Betriebssystemen, soweit ich weiß.