nodejs는 절대 경로에서 파일 이름을 얻습니까?


289

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

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

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

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

답변:



33

파일 이름의 파일 이름 부분을 가져 오기 위해 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'


4

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

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

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

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


1
윈도우 폴더 구분자로 \가
OwnageIsMagic

1
@OwnageIsMagic 네, 그렇기 때문에“경로 구분자가 /라는 것을 이미 알고 있다면…”이라고 쓰십시오. :)
leo

1
이 진술의 의미가 명확하지 않습니다. 이것은 다른 플랫폼에서 자동으로 실패하는 플랫폼 종속 코드를 생성합니다
OwnageIsMagic

@OwnageIsMagic 예, 그렇습니다. 특정 플랫폼 용으로 작성하지 않는 경우 항상 경로 모듈의 방법을 사용하십시오.
leo

창은 실제로 폴더 구분 기호로 /와 \를 모두 허용하며이를 혼합 할 수도 있습니다
RozzA

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

0

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


1
답을 정교하게 작성하십시오.
투명성과 모니카 JJ

0

따라서 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();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.