JavaScript에서 OS 경로 구분 기호를 결정하는 방법은 무엇입니까?
스크립트가 실행되는 OS에서 사용되는 경로 구분 기호를 JavaScript에서 어떻게 알 수 있습니까?
Afair는 Windows에서도 항상 경로 구분 기호로 /를 사용할 수 있습니다.
http://bytes.com/forum/thread23123.html 에서 인용 :
따라서 상황은 간단하게 요약 할 수 있습니다.
DOS 2.0 이후의 모든 DOS 서비스와 모든 Windows API는 슬래시 또는 백 슬래시를 허용합니다. 항상 있습니다.
표준 명령 셸 (CMD 또는 COMMAND)은 슬래시를 허용하지 않습니다. 이전 게시물에서 제공된 "cd ./tmp"예제조차도 실패합니다.
path
모듈 사용 node.js
은 플랫폼 별 파일 구분자 를 반환합니다.
예
path.sep // on *nix evaluates to a string equal to "/"
편집 : 아래 Sebas의 설명에 따라 이것을 사용하려면 js 파일의 맨 위에 이것을 추가해야합니다.
const path = require('path')
정답
예 모든 OS는 구분 기호를 전달하는 방법에 관계없이 CD ../ 또는 CD .. \ 또는 CD ..를 허용합니다. 그러나 경로를 다시 읽는 것은 어떻습니까? '창'경로가 포함되어 ' '
있고 \
허용 되는지 어떻게 알 수 있습니까 ?
명백한 'Duh!' 질문
예를 들어 설치 디렉토리에 의존하면 어떻게됩니까 %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('/')
is -1
in C:\Program Files\Notepad\Notepad++.exe
), 결과적으로 빈 문자열이됩니다.
해결책...
여기에는 다음 게시물의 코드가 포함 됩니다. Node.js로 현재 운영 체제를 확인하는 방법
myGlobals = { isWin: false, isOsX:false, isNix:false };
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; }
브라우저 측 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;
구분자를 가져 오는 도우미 함수
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 function to get the parent directory (cross platform)
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()
must be intelligent enough to know which its looking for.
You can get even really slick and check for both if the user is inputting a path via command line, 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);
You can also use 'path' module and path.sep as stated above, if you want to load a module to do this simple of a task. Personally, i think it sufficient to just check the information from the process that is already available to you.
var path = require('path');
var fileSep = path.sep; // returns '\\' on windows, '/' on *nix
And Thats All Folks!
VVS's answer is correct, with the exception of parsing a path given by a file input in internet explorer (tested with IE8 - I do not know about other versions). In this case, the path given by the input element's value (input.value) is in the form "C:\fakepath\<filename>". Note the backslashes here.
Just use "/", it works on all OS's as far as I know.
참고URL : https://stackoverflow.com/questions/125813/how-to-determine-the-os-path-separator-in-javascript
'Program Tip' 카테고리의 다른 글
주석으로 IntelliJ IDEA에서 중복 경고를 억제합니다. (0) | 2020.12.14 |
---|---|
SASL 인증 단계에서 서버가 오류를 반환했습니다. 인증 실패 (0) | 2020.12.14 |
추상 클래스 대 인터페이스 (0) | 2020.12.13 |
Django manage.py 알 수없는 명령 : 'syncdb' (0) | 2020.12.13 |
macOS Mojave에서 Xcode 10 네트워크 링크 조절기를 설치할 수 없음 (0) | 2020.12.13 |