Frage

Wie kann ich in JavaScript sagen, welches Pfadseparator in dem O verwendet wird, in dem das Skript runnning wird?

War es hilfreich?

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)

bekommen
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() 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 \ ". Beachten Sie die Schrägstriche hier.

Verwenden Sie einfach „/“, es funktioniert auf allen Betriebssystemen, soweit ich weiß.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top