Как я могу узнать в JavaScript, какой разделитель пути используется в ОС, в которой выполняется скрипт?
javascript
file
directory
Панг
источник
источник
Ответы:
Вы всегда можете использовать / в качестве разделителя путей, даже в Windows.
Цитата с http://bytes.com/forum/thread23123.html :
источник
Использовать
path
модуль вnode.js
возвращает разделитель файлов для конкретной платформы.пример
path.sep // on *nix evaluates to a string equal to "/"
Изменить: в соответствии с комментарием Себаса ниже, чтобы использовать это, вам нужно добавить это вверху вашего js файла:
const path = require('path')
источник
path.sep
.const path = require('path');
Правильный ответ
Да, все ОС принимают CD ../ или CD .. \ или CD .. независимо от того, как вы передаете разделители. А как насчет того, чтобы прочитать путь назад. Как вы узнаете, если это, скажем, путь «окна» с
' '
и\
разрешено.Очевидное «Да!» Вопрос
Что происходит, когда вы зависите, например, от каталога установки
%PROGRAM_FILES% (x86)\Notepad++
. Возьмем следующий пример.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); } }
Что случилось!?
targetDir
устанавливается в подстроку между индексами0
, а0
(indexOf('/')
находится-1
вC:\Program Files\Notepad\Notepad++.exe
), в результате пустая строка.Решение...
Это включает код из следующего сообщения: Как определить текущую операционную систему с помощью Node.js
myGlobals = { isWin: false, isOsX:false, isNix:false };
Обнаружение ОС на стороне сервера.
// 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; }
Обнаружение ОС со стороны браузера
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;
Вспомогательная функция для получения разделителя
function getPathSeparator(){ if(myGlobals.isWin){ return '\\'; } else if(myGlobals.isOsx || myGlobals.isNix){ return '/'; } // default to *nix system. return '/'; } // modifying our getDir method from above...
Вспомогательная функция для получения родительского каталога (кросс-платформенный)
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()
должен быть достаточно умен, чтобы знать, что он ищет.Вы можете получить даже действительно гладко и проверить оба, вводит ли пользователь путь через командную строку и т. Д.
// 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);
Вы также можете использовать модуль path и path.sep, как указано выше, если вы хотите загрузить модуль для выполнения этой простой задачи. Лично я считаю, что достаточно просто проверить информацию из процесса, которая уже доступна вам.
var path = require('path'); var fileSep = path.sep; // returns '\\' on windows, '/' on *nix
И это все!
источник
NodeJS
тега - вы ответили как на стороне сервера, так и на стороне клиента . Ваш ответ полностью - и фактически - отвечает на вопрос. Для узла, я думаю, подойдет модуль пути, потому что он не повлияет на производительность сгенерированного байт-кода и не должен повлиять на читаемость (один оператор импорта). Однако вы единственный ответ на стороне клиента. Это должно быть принято.Как уже было сказано здесь, вы можете найти разделитель путей для ОС,
path.join
чтобы вручную создать свой путь. Но вы также можете позволитьpath.join
выполнить эту работу, что является моим предпочтительным решением при работе с конструкциями путей:Пример:
const path = require('path'); const directory = 'logs'; const file = 'data.json'; const path1 = `${directory}${path.sep}${file}`; const path2 = path.join(directory, file); console.log(path1); // Shows "logs\data.json" on Windows console.log(path2); // Also shows "logs\data.json" on Windows
источник
Просто используйте "/", насколько я знаю, он работает на всех ОС.
источник
determine
, а не какой оператор работает везде :-)