2011-08-16 35 views

Trả lời

153

Hãy thử điều này:

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

Lưu ý dấu gạch chéo ở đầu đường dẫn tương đối.

+22

tôi đã cố gắng mà không có may mắn nhưng tôi chỉ đã làm 'fs.readFile (__ dirname + '/../../ foo.bar');' và nó hoạt động. – fancy

+6

Tôi giả định rằng '__dirname' giống như' '/ foo/bar'' thay vì ''/foo/bar/''. –

+1

tôi cho là vậy ... – fancy

8

Có vẻ như bạn sẽ cần mô-đun path. (path.normalize nói riêng)

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

fs.readFile(path.normalize(__dirname + "/../../foo.bar")); 
105

Sử dụng 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() sẽ xử lý hàng đầu/đuôi slashes cho bạn và chỉ làm điều đúng và bạn không cần phải cố gắng nhớ khi dấu gạch chéo sau tồn tại và khi chúng không.

+0

câu trả lời này với 'path.join' là đúng, câu trả lời được chấp nhận sẽ không được theo sau, nó thậm chí còn kích hoạt' eslint' trên 'airbnb-base preset', quy tắc [no-path-concat] (https: // eslint.org/docs/rules/no-path-concat) cụ thể là – revelt

+0

upvote thứ 100.'' __dirname' của tôi là 'host/src/folder' và tôi cần' host/folder' và điều này làm việc cho tôi chứ không phải câu trả lời OP. – carkod

6

Nếu bạn không tích cực về vị trí của phụ huynh, điều này sẽ giúp bạn có được con đường;

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

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

Nếu mô-đun khác gọi bạn và bạn vẫn muốn biết vị trí của tập tin chính được chạy, bạn có thể sử dụng một biến thể của @ đang Jason:

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

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

Bằng cách đó bạn sẽ có được vị trí của tập lệnh thực sự đang chạy.

52

Tôi biết đó là một chút cầu kỳ, nhưng tất cả các câu trả lời cho đến nay là không hoàn toàn đúng.

Điểm của path.join() là để loại bỏ sự cần thiết cho người gọi để biết bộ phân cách thư mục nào để sử dụng (làm nền tảng mã không thuyết phục).

Về mặt kỹ thuật câu trả lời đúng sẽ là một cái gì đó như:

var path = require("path"); 

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

tôi sẽ có thêm điều này như một bình luận cho câu trả lời Alex Wayne nhưng không đủ đại diện chưa!

EDIT: theo quan sát user1767586 của

+3

'foo.bar' phải là 'foo.bar'. Tôi đã cố chỉnh sửa nhưng chỉnh sửa cần tối thiểu 6 ký tự (quy tắc ngu ngốc nếu bạn hỏi tôi, ngăn chúng tôi chỉnh sửa lỗi chính tả nhỏ như thế này) – user1767586

4

Bạn có thể sử dụng

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

Cách đơn giản nhất là nên sử dụng path.resolve:

path.resolve(__dirname, '..', '..'); 
+0

thực sự là chính xác giải pháp như bạn không cần phải giải quyết thư mục bằng cách tham gia '../' vào đường dẫn –

Các vấn đề liên quan