fs:如何找到父文件夹?


Answers:


277

试试这个:

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

注意相对路径开始处的正斜杠。


25
我一直没有运气就尝试过,但是我确实做到了fs.readFile(__dirname + '/../../foo.bar');,而且奏效了。
花式

6
我以为那__dirname是什么,'/foo/bar'而不是'/foo/bar/'
安德鲁·黑尔

3
路径中的第一个“ /”:“/../../foo.bar”至关重要。我有'../../foo.bar'导致了我的问题。
levibostian

1
为什么?只是为什么?有人可以解释吗?
eyurdakul

@eyurdakul如果我听得懂的话:如果您说的是,它__dirname看起来像是一个不存在的目录,而不是。斜线很重要。/path/to/your/dir__dirname + ".."/path/to/your/dir../path/to/your
JouleV位于topanswers.xyz

160

使用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,这对我有用,而不是OP的答案。
carkod

8
您可以再向前迈一步path.join(__dirname, '..', '..', 'foo.bar')
没人先生

谢谢Alex,经过6个小时的搜索,您救了我,
SHOHIL SETHIA

95

我知道这有点挑剔,但是到目前为止,所有答案都不是很正确。

path.join()的重点是消除了调用者知道使用哪个目录分隔符的需要(使代码平台不可知)。

从技术上讲,正确的答案应该是:

var path = require("path");

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

我本来可以将此评论添加到Alex Wayne的答案中,但还没有足够的代表!

编辑:根据user1767586的观察


4
“ foo.bar”应为“ foo.bar”。我尝试进行编辑,但编辑量必须至少为6个字符(如果您问我,这是愚蠢的规则,它会阻止我们编辑此类小的拼写错误。)
user1767586

1
我怀疑这是最好的答案。其他一些答案可能适用于给定操作系统上的给定个人,但是这些其他答案中是否存在特定类型的文件层次分隔符(即斜杠)使我感到奇怪。例如,我试图以一种与平台无关的方式编写Electron应用程序,尽管我还没有详尽地证明这一点,但我怀疑这是最安全的方法。谢谢。
安德鲁·威廉姆斯

实际上,这是不必要的,因为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');


2

我正在运行电子应用程序,我可以通过path.resolve()获取父文件夹

父级1级:path.resolve(__dirname, '..') + '/'

父级2级:path.resolve(__dirname, '..', '..') + '/'


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.