fs:親フォルダーを見つけるにはどうすればよいですか?


回答:


277

これを試して:

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 2016

1
どうして?一般的にはなぜですか?誰かが説明してもらえますか?
eyurdakul

私はcorrentlyそれを理解していれば@eyurdakul:__dirnameように見えるかもしれ/path/to/your/dirあなたが言うならば、__dirname + ".."それはある/path/to/your/dir..のではなく、存在しないディレクトリです、/path/to/your。スラッシュは重要です。
JouleVはtopanswers.xyz

161

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は正しい方法です、受け入れられた答えは従うべきではありません。それは、特にno-path-concatのルールでさえトリガーeslintしますairbnb-base preset
22:03に

100番目の賛成票。私__dirnamehost/src/folderそうでしたhost/folder、そして私は必要でした、そしてこれは私にとってうまくいきました、OPの答えではありませんでした。
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'));

私はこれをアレックスウェインの回答へのコメントとして追加したでしょうが、まだ十分な担当者ではありません!

編集:user1767586の観察に従って


4
'foo.bar'は 'foo.bar'である必要があります。編集しようとしましたが、編集は6文字以上にする必要があります(愚かなルールがあれば、このような小さなタイプミスを編集できません)
user1767586

1
これが最良の答えだと思います。他の回答のいくつかは、特定のオペレーティングシステムの特定の個人に対して機能する可能性があります、他の回答に特定の種類のファイル階層セパレーター(つまり、スラッシュ)が含まれているため、それらがどれほど普遍的であるのか不思議に思います。たとえば、プラットフォームにとらわれない方法でElectronアプリを作成しようとしていますが、徹底的に証明したわけではありませんが、これが最も安全な方法だと思います。ありがとう。
Andrew Willems

これは実際には不要です。path.join()は、戻る前に、結果の結合されたパスでpath.normalize()(すべてのパス区切り文字を現在の/意図されたOS形式に変換する)を内部的に使用するためです。ただし、害はありません。
iono 2018



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

electronアプリを実行していて、path.resolve()で親フォルダーを取得できます

親1レベル:path.resolve(__dirname, '..') + '/'

親2レベル:path.resolve(__dirname, '..', '..') + '/'


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.