【发布时间】:2011-10-28 07:45:37
【问题描述】:
我如何写这个来备份父级 2 级来查找文件?
fs.readFile(__dirname + 'foo.bar');
【问题讨论】:
标签: javascript node.js filesystems
我如何写这个来备份父级 2 级来查找文件?
fs.readFile(__dirname + 'foo.bar');
【问题讨论】:
标签: javascript node.js filesystems
试试这个:
fs.readFile(__dirname + '/../../foo.bar');
注意相对路径开头的正斜杠。
【讨论】:
fs.readFile(__dirname + '/../../foo.bar');,它成功了。
__dirname 类似于'/foo/bar' 而不是'/foo/bar/'。
__dirname 可能看起来像 /path/to/your/dir,如果你说 __dirname + ".." 它是 /path/to/your/dir..,这是一个不存在的目录,而不是 /path/to/your。斜线很重要。
看来您需要path 模块。 (特别是path.normalize)
var path = require("path"),
fs = require("fs");
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
【讨论】:
使用 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() 将为您处理前导/尾随斜杠,并且只做正确的事情,您不必尝试记住尾随斜杠何时存在以及何时不存在。
【讨论】:
path.join的答案是正确的方法,不应该遵循接受的答案,它甚至会在airbnb-base preset上触发eslint,特别是规则no-path-concat
__dirname 是host/src/folder,我需要host/folder,这对我有用,而不是OP 答案。
path.join(__dirname, '..', '..', 'foo.bar')
如果您不确定父母的位置,这将为您提供路径;
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
【讨论】:
如果另一个模块调用了你的模块,而你仍然想知道正在运行的主文件的位置,你可以使用 @Jason 代码的修改:
var path = require('path'),
__parentDir = path.dirname(process.mainModule.filename);
fs.readFile(__parentDir + '/foo.bar');
这样您将获得实际运行的脚本的位置。
【讨论】:
我知道这有点挑剔,但到目前为止所有的答案都不完全正确。
path.join() 的目的是消除调用者知道要使用哪个目录分隔符的需要(使代码平台不可知)。
从技术上讲,正确的答案是这样的:
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
我会将此作为评论添加到 Alex Wayne 的回答中,但还没有足够的代表!
编辑:根据 user1767586 的观察
【讨论】:
你可以使用
path.join(__dirname, '../..');
【讨论】:
最简单的方法是使用path.resolve:
path.resolve(__dirname, '..', '..');
【讨论】:
../ 加入路径来解析文件夹
这也可以:
fs.readFile(`${__dirname}/../../foo.bar`);
【讨论】:
我正在运行电子应用程序,我可以通过 path.resolve() 获取父文件夹
父级 1 级:path.resolve(__dirname, '..') + '/'
父母2级:path.resolve(__dirname, '..', '..') + '/'
【讨论】:
这很好用
path.join(__dirname + '/../client/index.html')
const path = require('path')
const fs = require('fs')
fs.readFile(path.join(__dirname + '/../client/index.html'))
【讨论】:
您可以通过不同的方式找到父文件夹下的文件,
const path = require('path');
const fs = require('fs');
// reads foo.bar file which is located in immediate parent folder.
fs.readFile(path.join(__dirname, '..', 'foo.bar');
// Method 1: reads foo.bar file which is located in 2 level back of the current folder.
path.join(__dirname, '..','..');
// Method 2: reads foo.bar file which is located in 2 level back of the current folder.
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
// Method 3: reads foo.bar file which is located in 2 level back of the current folder.
fs.readFile(__dirname + '/../../foo.bar');
// Method 4: reads foo.bar file which is located in 2 level back of the current folder.
fs.readFile(path.resolve(__dirname, '..', '..','foo.bar'));
【讨论】: