fs : 상위 폴더는 어떻게 찾습니까?


195

파일을 찾기 위해 부모 2 레벨로 돌아가려면 어떻게 작성합니까?

fs.readFile(__dirname + 'foo.bar');

답변:


279

이 시도:

fs.readFile(__dirname + '/../../foo.bar');

상대 경로의 시작 부분에 슬래시가 있습니다.


25
나는 운없이 fs.readFile(__dirname + '/../../foo.bar');그것을 시도했지만 방금 그랬고 효과가있었습니다.
멋진

6
나는 그보다는 오히려 __dirname뭔가가 있다고 가정하고 있습니다. '/foo/bar''/foo/bar/'
Andrew Hare

3
경로에서 첫 번째 '/': '/../../foo.bar'가 중요합니다. 내 문제를 일으키는 '../../foo.bar'가 있습니다.
levibostian

1
왜? 왜 일반적으로? 누군가 설명해 주시겠습니까?
eyurdakul

내가 corrently을 이해한다면 @eyurdakul : __dirname처럼 보일 수 있습니다 /path/to/your/dir당신이 말한다면, __dirname + ".."그것이 /path/to/your/dir..보다는, 존재하지 않는 디렉토리 인 /path/to/your. 슬래시가 중요합니다.
joulev

165

path.join 사용 http://nodejs.org/docs/v0.4.10/api/path.html#path.join

var path = require("path"),
    fs = require("fs");

fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));

path.join() 선행 / 후행 슬래시를 처리하고 올바른 작업을 수행하며 후행 슬래시가 존재하는 시점과 그렇지 않은 경우를 기억하려고 할 필요가 없습니다.


4
이 대답은 path.join허용 대답은 다음해서는 안 올바른 방법이며, 심지어 트리거 eslintairbnb-base preset규칙 없는 경로 CONCAT 특히
revelt

100 번째 공감. 내가 __dirname있었다 host/src/folder나는 필요 host/folder이것은 나를 위해하지 영업 대답을했다.
carkod

8
한 걸음 더 path.join(__dirname, '..', '..', 'foo.bar')
Mr. Nobody

당신에게 알렉스 감사, 당신은 검색 6 시간 후 저를 저장
SHOHIL SETHIA에게

95

나는 그것이 까다 롭다는 것을 알고 있지만, 지금까지의 모든 대답은 옳지 않습니다.

path.join ()의 요점은 호출자가 사용할 디렉토리 분리자를 알 필요가 없도록하는 것입니다 (코드 플랫폼을 무시 함).

기술적으로 정답은 다음과 같습니다.

var path = require("path");

fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));

나는 이것을 Alex Wayne의 답변에 대한 주석으로 추가했지만 충분한 담당자는 아닙니다!

편집 : 사용자에 따라 1767586의 관찰


4
'foo.bar'는 'foo.bar'여야합니다. 편집을 시도했지만 편집은 최소 6 자 여야합니다 (요청하는 경우 어리석은 규칙, 이와 같이 작은 오타를 편집하지 못하도록 방지)
user1767586

1
이것이 최선의 대답이라고 생각합니다. 다른 답변 중 일부는 주어진 운영 체제에서 특정 개인에게 효과적 일 있지만 다른 답변 에 특정 종류의 파일 계층 구분 기호 (예 : 슬래시)가 있으면 얼마나 보편적인지 궁금합니다. 예를 들어, 플랫폼에 관계없이 Electron 앱을 작성하려고하는데 철저하게 입증하지는 않았지만 이것이 가장 안전한 방법이라고 생각합니다. 감사.
Andrew Willems

path.join () 리턴하기 전에 결과 결합 된 경로에서 path.normalize () (모든 경로 분리자를 현재 / 의도 된 OS 형식으로 변환 )를 내부적으로 사용하므로 실제로는 불필요 합니다. 그래도 아프지 않습니다.
iono



11

다른 모듈이 당신을 호출하고 여전히 실행중인 메인 파일의 위치를 ​​알고 싶다면 @Jason 코드의 수정을 사용할 수 있습니다 :

var path = require('path'),
    __parentDir = path.dirname(process.mainModule.filename);

fs.readFile(__parentDir + '/foo.bar');

그렇게하면 실제로 실행중인 스크립트의 위치를 ​​얻을 수 있습니다.


8

부모님이 어디에 있는지에 대해 긍정적이지 않다면 경로를 알려줄 것입니다.

var path = require('path'),
    __parentDir = path.dirname(module.parent.filename);

fs.readFile(__parentDir + '/foo.bar');

5

당신이 사용할 수있는

path.join(__dirname, '../..');

2

전자 응용 프로그램을 실행 중이며 부모 폴더를 path.resolve ()로 가져올 수 있습니다.

부모 1 레벨 :path.resolve(__dirname, '..') + '/'

부모 2 레벨 :path.resolve(__dirname, '..', '..') + '/'


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.