Respostas:
Tente o seguinte:
fs.readFile(__dirname + '/../../foo.bar');
Observe a barra no início do caminho relativo.
__dirname
era algo '/foo/bar'
mais do que '/foo/bar/'
.
__dirname
pode parecer /path/to/your/dir
, se você diz __dirname + ".."
que é /path/to/your/dir..
, que é um diretório inexistente, e não /path/to/your
. A barra é importante.
Use 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()
ele lida com barras à esquerda / à direita e faz a coisa certa e você não precisa se lembrar de quando existem barras à direita e quando não existem.
path.join
é a maneira correta, a resposta aceita não deve ser seguido, ele ainda provoca eslint
em airbnb-base preset
, a regra não-path-concat em particular
__dirname
era host/src/folder
e eu precisava host/folder
e isso funcionou para mim, não a resposta do OP.
path.join(__dirname, '..', '..', 'foo.bar')
Eu sei que é um pouco exigente, mas todas as respostas até agora não estão certas.
O objetivo de path.join () é eliminar a necessidade de o chamador saber qual separador de diretório usar (tornando a plataforma de código independente).
Tecnicamente, a resposta correta seria algo como:
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
Eu teria acrescentado isso como um comentário à resposta de Alex Wayne, mas ainda não o suficiente!
EDIT: conforme observação de user1767586
A maneira mais fácil seria usar path.resolve
:
path.resolve(__dirname, '..', '..');
../
- se ao caminho
Parece que você precisará do path
módulo. ( path.normalize
em particular)
var path = require("path"),
fs = require("fs");
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
Se outro módulo chamar o seu e você ainda quiser saber o local do arquivo principal em execução, use uma modificação do código de @ Jason:
var path = require('path'),
__parentDir = path.dirname(process.mainModule.filename);
fs.readFile(__parentDir + '/foo.bar');
Dessa forma, você obterá a localização do script realmente sendo executado.
Se você não souber onde está o pai ou mãe, isso lhe dará o caminho;
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
Estou executando o aplicativo elétron e posso obter a pasta pai por path.resolve ()
nível pai 1:path.resolve(__dirname, '..') + '/'
pai 2 níveis:path.resolve(__dirname, '..', '..') + '/'
isso também funcionará:
fs.readFile(`${__dirname}/../../foo.bar`);
fs.readFile(__dirname + '/../../foo.bar');
e funcionou.