2011-08-16 84 views
118

如何編寫此文件以備份父級2級以查找文件?在相對路徑的開始fs:我如何找到父文件夾?

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

注意正斜槓:

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

回答

153

試試這個。

+22

我一直在試圖與沒有運氣,但我只是做了'fs.readFile(__ dirname +'/../../ foo.bar');'它工作。 – fancy

+6

我假設'__dirname'就像''/ foo/bar''而不是''/ foo/bar /''。 –

+1

我想是這樣的...... – fancy

8

看起來你需要path模塊。 (特別path.normalize

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

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

使用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()將處理前/後你斜線,只是做正確的事,你不必試圖記住當尾隨斜線存在,當他們不。

+0

這個答案與'path.join'是正確的方式,接受的答案不應該遵循,它甚至會觸發'eslint'上'airbnb-base preset',規則[no-path-concat](https:// eslint.org/docs/rules/no-path-concat)特別是 – revelt

+0

已經100次upvote。我的'__dirname'是'host/src /文件夾',我需要'主機/文件夾',這對我來說很有用,而不是OP的答案。 – carkod

6

如果您對父母的位置沒有肯定的話,這會爲您帶來路徑;

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

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

如果另一個模塊調用你的,你還是會想知道的主要文件的位置正在運行,你可以使用的修改@傑森代碼:

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

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

這樣,你會獲取實際運行的腳本的位置。

52

我知道這有點挑剔,但迄今爲止所有的答案都不完全正確。

path.join()的目的是消除調用者需要知道使用哪個目錄分隔符(使代碼平臺不可知)。

技術上正確的答案會是這樣的:

var path = require("path"); 

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

我會加入這個爲亞歷克斯·韋恩的答案評論,但還沒有足夠的代表!

編輯:按user1767586的觀察

+3

'foo.bar'應該是'foo.bar'。我試着做一個編輯,但是編輯至少需要6個字符(如果你問我這個愚蠢的規則,阻止我們編輯這樣的小錯別字) – user1767586

4

您可以使用

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

最簡單的方法是使用​​:

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

確實是正確的解決方案,因爲您不需要通過將「../」連接到路徑來解析文件夾 –