web-dev-qa-db-fra.com

fs: comment localiser un dossier parent?

Comment puis-je écrire cela pour remonter les 2 niveaux parent afin de trouver un fichier?

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

Essaye ça:

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

Notez la barre oblique au début du chemin relatif.

237
Andrew Hare

Utilisez 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() gérera pour vous les barres obliques de début/de fin, mais vous n'avez rien à faire. Vous n'avez pas besoin d'essayer de vous rappeler quand les barres obliques existent ou non.

138
Alex Wayne

Je sais que c'est un peu difficile, mais toutes les réponses jusqu'à présent ne sont pas tout à fait correctes.

Path.join () a pour objectif d'éviter à l'appelant de savoir quel séparateur de répertoires utiliser (rendre le code indépendant de la plate-forme).

Techniquement, la bonne réponse serait quelque chose comme:

var path = require("path");

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

J'aurais ajouté ceci comme commentaire à la réponse d'Alex Wayne mais pas assez de représentant pour le moment!

EDIT: selon l'observation de l'utilisateur1767586

86
smremde

Le moyen le plus simple serait d’utiliser path.resolve :

_path.resolve(__dirname, '..', '..');
_
50
Yan Foto

On dirait que vous aurez besoin du module path . ( path.normalize en particulier)

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

fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
_
12
Dominic Barnes

Si un autre module appelle le vôtre et que vous souhaitez toujours connaître l'emplacement du fichier principal en cours d'exécution, vous pouvez utiliser une modification du code de @ Jason:

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

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

De cette façon, vous obtiendrez l'emplacement du script en cours d'exécution.

11
Jeremy Battle

Si vous n'êtes pas certain de l'endroit où se trouve le parent, vous obtiendrez le chemin.

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

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

Vous pouvez utiliser

path.join(__dirname, '../..');
5
puneet

cela fonctionnera aussi:

fs.readFile(`${__dirname}/../../foo.bar`);
1
Dhruvin modi