Domanda

Come posso sapere in JavaScript quale separatore di percorso viene utilizzato nel sistema operativo in cui è in esecuzione lo script?

È stato utile?

Soluzione

Puoi sempre usare / come separatore di percorso, anche su Windows.

Citazione da http://bytes.com/forum/thread23123.html :

  

Quindi, la situazione può essere riassunta   piuttosto semplicemente:

     
      
  • Tutti i servizi DOS dal DOS 2.0 e tutte le API di Windows accettano entrambi i forward   barra o barra rovesciata. Sempre.

  •   
  • Nessuna delle shell dei comandi standard (CMD o COMMAND) accetterà l'inoltro   barre. Anche il & Quot; cd ./tmp" esempio   indicato in un post precedente non riesce.

  •   

Altri suggerimenti

Utilizza path in node.js restituisce la piattaforma specifica separatore di file.
Esempio

path.sep  // on *nix evaluates to a string equal to "/"

Modifica: secondo il commento di Sebas di seguito, per utilizzare questo, è necessario aggiungere questo nella parte superiore del file js:

const path = require('path')

La risposta corretta

tutti i sistemi operativi accettano CD ../ o CD .. \ o CD .. indipendentemente da come si passa nei separatori. Ma per quanto riguarda la lettura di un percorso indietro. Come faresti a sapere se si dice, un percorso 'windows', con ' ' e \ consentiti.

L'ovvio 'Duh!' Domanda

Cosa succede quando si dipende, ad esempio, dalla directory di installazione %PROGRAM_FILES% (x86)\Notepad++. Prendi il seguente esempio.

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);
    }
}

Che cosa è successo !?

targetDir viene impostato su una sottostringa tra gli indici 0 e indexOf('/') (-1 è C:\Program Files\Notepad\Notepad++.exe in getDir()), con conseguente stringa vuota.

La soluzione ...

Questo include il codice dal seguente post: Come posso determinare l'attuale sistema operativo con Node.js

myGlobals = { isWin: false, isOsX:false, isNix:false };

Rilevamento lato server del sistema operativo.

// 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; }

Rilevamento lato browser del sistema operativo

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;

Funzione di aiuto per ottenere il separatore

function getPathSeparator(){
    if(myGlobals.isWin){
        return '\\';
    }
    else if(myGlobals.isOsx  || myGlobals.isNix){
        return '/';
    }

    // default to *nix system.
    return '/';
}

// modifying our getDir method from above...

Funzione di supporto per ottenere la directory principale (multipiattaforma)

function getDir(filePath){
    if(filePath !== '' && filePath != null){
       // this will fail on Windows, and work on Others
       return filePath.substring(0, filePath.lastIndexOf(getPathSeparator()) + 1);
    }
}

<=> deve essere abbastanza intelligente da sapere quale sta cercando.

Puoi anche ottenere davvero agevole e controllare entrambi se l'utente sta inserendo un percorso dalla riga di comando, ecc.

// 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);

Puoi anche usare il modulo 'path' e path.sep come indicato sopra, se vuoi caricare un modulo per fare questo semplice compito. Personalmente, penso che sia sufficiente controllare le informazioni dal processo che sono già disponibili per te.

var path = require('path');
var fileSep = path.sep;    // returns '\\' on windows, '/' on *nix

E questo è tutto!

La risposta di VVS è corretta, ad eccezione dell'analisi di un percorso fornito da un input di file in Internet Explorer (testato con IE8 - Non conosco altre versioni). In questo caso, il percorso indicato dal valore dell'elemento di input (input.value) è nella forma & Quot; C: \ fakepath \ & Lt; nome file & Gt; & Quot ;. Nota le barre rovesciate qui.

Usa " / " funziona su tutti i sistemi operativi per quanto ne so.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top