Comment déterminer le séparateur de chemin D'OS en JavaScript?

Comment puis-je dire dans JavaScript quel chemin séparateur est utilisé dans le système D'exploitation où le script est exécuté?

33
demandé sur VVS 2008-09-24 11:23:24

5 réponses

Afair vous pouvez toujours utiliser / comme un séparateur de chemin, même sur Windows.

citation de http://bytes.com/forum/thread23123.html :

ainsi, la situation peut être résumée plutôt simplement:

  • tous les services DOS depuis DOS 2.0 et tous les API Windows acceptent soit forward barre oblique ou oblique. Toujours avoir.

  • aucun des shells de commande standard (CMD ou commande) n'accepte l'avance oblique. Même le lecteur de cd ./tmp" exemple donné dans un post précédent échoue.

16
répondu VVS 2008-09-24 07:32:01

Utiliser path module node.js renvoie à la plate-forme de fichier spécifique séparateur.

exemple

path.sep  // on *nix evaluates to a string equal to "/"
68
répondu t98907 2015-08-05 19:05:38

la réponse de VVS est correcte, à l'exception de l'analyse d'un chemin donné par une entrée de fichier dans internet explorer (testé avec IE8 - Je ne sais pas d'autres versions). Dans ce cas, le chemin donné par la valeur de l'élément d'entrée (input.valeur) est dans la forme "C:\fakepath\ < filename>". Notez les barres obliques ici.

4
répondu Milagre 2010-08-01 03:49:15

La Bonne Réponse

Oui tous les OS de l'accepter CD ../ ou CD ..\ ou CD .. peu importe comment vous passez dans les séparateurs. Mais ce que sur la lecture d'un chemin de retour. Comment le sauriez-vous si son chemin dit "windows", avec ' ' et \ permis.

L'Évidente " Duh!"La Question du

Ce qui se passe quand vous avez besoin, par exemple, le répertoire d'installation %PROGRAM_FILES% (x86)\Notepad++ . Prendre la l'exemple suivant.

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

Ce qui s'est passé!?

targetDir est placé sur un substrat entre les indices 0 , et 0 ( indexOf('/') est -1 dans C:\Program Files\Notepad\Notepad++.exe ), résultant en la chaîne vide.

La Solution...

Cela inclut le code de la poste suivante: Comment puis-je déterminer le système d'exploitation actuel avec noeud.js

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

côté Serveur détection de l'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; }

Navigateur côté de détection d'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;

fonction D'aide pour obtenir le séparateur

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

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

// modifying our getDir method from above...

fonction D'aide pour obtenir le répertoire parent (plateforme croisée)

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() doit être assez intelligent pour savoir ce qu'il cherche.

vous pouvez obtenir même vraiment habile et vérifiez les deux si l'utilisateur entre un chemin via la ligne de commande, 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);

vous pouvez également utiliser le module 'path' et le path.sep comme indiqué ci-dessus, si vous voulez charger un module pour faire simple d'une tâche. Personnellement, je pense qu'il suffit de vérifier l'information du processus qui est déjà à votre disposition.

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

Et C'Est Tout Les Gens!

2
répondu Decoded 2017-05-23 11:54:59

il suffit d'utiliser "/", il fonctionne sur tous les OS, autant que je sache.

0
répondu Vincent McNabb 2008-09-24 07:25:46