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é?
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.
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.
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!
il suffit d'utiliser "/", il fonctionne sur tous les OS, autant que je sache.