[node.js] nodejs는 절대 경로에서 파일 이름을 얻습니까?

API가 절대 파일 경로에서 파일 이름을 검색 할 수 있습니까?

"foo.txt"를 들어"/var/www/foo.txt"

나는 그것이 문자열 연산과 함께 작동한다는 것을 알고 fullpath.replace(/.+\//, '')
있지만 file.getName()Java 와 같이 더 ‘형식적인’방법이 있다는 것을 알고 싶다 .

NodeJS가 절대 경로에서 파일 이름을 가져 옵니까?



답변

모듈 의 basename방법을 사용하십시오 path.

path.basename('/foo/bar/baz/asdf/quux.html')
// returns
'quux.html'

위의 예에서 가져온 문서는 다음과 같습니다 .


답변

파일 이름의 파일 이름 부분을 가져 오기 위해 basename 메소드가 사용됩니다.

var path = require("path");
var fileName = "C:\\Python27\\ArcGIS10.2\\python.exe";
var file = path.basename(fileName);

console.log(file); // 'python.exe'

확장명이없는 파일 이름을 원하는 경우 확장명 (확장명 포함)을 basename 메소드에 전달하여 확장명이없는 이름 만 Node에 반환하도록 Node에 지시합니다.

var path = require("path");
var fileName = "C:\\Python27\\ArcGIS10.2\\python.exe";
var extension = path.extname(fileName);
var file = path.basename(fileName,extension);

console.log(file); // 'python'


답변

파일 이름에서 확장자를 제거하려는 경우 https://nodejs.org/api/path.html#path_path_basename_path_ext 를 사용할 수 있습니다.

path.basename('/foo/bar/baz/asdf/quux.html', '.html');


답변

/질문의 예에서 암시 된 것처럼 경로 구분 기호가 특정 플랫폼 / 환경을 작성하고 있음을 이미 알고 있다면 간단하게 유지하고 구분 기호로 문자열을 나눌 수 있습니다.

'/foo/bar/baz/asdf/quux.html'.split('/').pop()

즉 것 빨리 (및 IMO 청소기) 정규 표현식으로 교체하는 것보다 있습니다.

다시 : 특정 환경에서 작성하는 경우에만이 작업을 수행하십시오. 그렇지 않으면 path경로가 놀라 울 정도로 복잡 하므로 모듈을 사용하십시오 . 예를 들어, Windows /는 많은 경우 공유 네트워크 폴더 등에 사용되는 스타일 접두사 를 지원 하지만 지원 하지는 않습니다\\?\? . Windows에서 위의 방법은 조만간 실패 할 것으로 예상됩니다.


답변

var path = require("path");
var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";
var name = path.parse(filepath).name;

확장자를 사용하는 이름이 필요한 경우 확장명이없는 파일 이름을 제공합니다.

var path = require("path");
var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";
var name = path.basename(filepath);


답변

NodeJS에서 __filename.split (/ \ | //). pop ()은 모든 OS 플랫폼의 절대 파일 경로에서 파일 이름 만 반환합니다. 이 정규식 접근 방식으로도 정규식 기술을 되 찾을 수 있도록하는 동안 API 기억 / 가져 오기에주의해야하는 이유는 무엇입니까?


답변

따라서 Nodejs는 기본 전역 변수라는 '__fileName' 현재 실행중인 파일을 보유 가 있습니다. 제 충고는 __fileName을 모든 파일의 서비스로 전달하여 fileName 검색을 동적으로 만드는 것입니다

아래에서는 fileName 문자열을 사용하여 path.sep . 참고 path.sep는 posix 파일 구분 기호 및 Windows 파일 구분 기호 ( ‘/’및 ‘\’문제)를 방지합니다. 훨씬 더 깨끗합니다. 부분 문자열을 가져 와서 마지막으로 구분 된 이름 만 가져 와서 길이를 3 배로 빼면 스스로를 말합니다.

이와 같은 서비스를 작성할 수 있습니다 (이것은 typescript이지만 js로 작성할 수는 있습니다)

export class AppLoggingConstants {

    constructor(){

    }
      // Here make sure the fileName param is actually '__fileName'
    getDefaultMedata(fileName: string, methodName: string) {
        const appName = APP_NAME;
        const actualFileName = fileName.substring(fileName.lastIndexOf(path.sep)+1, fileName.length - 3);
        //const actualFileName = fileName;
     return appName+ ' -- '+actualFileName;
    }


}

export const AppLoggingConstantsInstance = new AppLoggingConstants();