javascript - fs:como faço para localizar uma pasta pai?




node.js filesystems (9)

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() irá lidar com barras path.join() / finais para você e apenas fazer a coisa certa e você não tem que tentar se lembrar de quando existem barras e quando elas não existem.

Como escrevo isto para voltar aos níveis pai para encontrar um arquivo?

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

Você pode usar

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

Se outro módulo chamar o seu e você ainda quiser saber a localização do arquivo principal sendo executado, você pode usar uma modificação do código do @ 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 que está sendo executado.


Parece que você precisará do módulo path . ( path.normalize em particular)

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

fs.readFile(path.normalize(__dirname + "/../../foo.bar"));

Se você não tiver certeza de onde o pai está, isso lhe dará o caminho;

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

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

Eu sei que é um pouco exigente, mas todas as respostas até agora não estão bem corretas.

O ponto de path.join () é eliminar a necessidade de o chamador saber qual separador de diretório usar (tornando a plataforma de código agnóstica).

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 foi suficiente!

EDIT: como por observação user1767586


isso também funcionará:

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

A maneira mais fácil seria usar path.resolve :

path.resolve(__dirname, '..', '..');

Se você tiver uma pergunta sobre essa entrevista (ou perceber algum comportamento igualmente inesperado em seu código), pense em que tipo de coisa poderia causar um comportamento que parece impossível à primeira vista:

  1. Codificação : Neste caso, a variável que você está olhando não é aquela que você pensa que é. Isso pode acontecer se você intencionalmente mexer em Unicode usando homoglyphs ou caracteres de espaço para fazer o nome de uma variável parecer com outro, mas problemas de codificação também podem ser introduzidos acidentalmente, por exemplo, ao copiar e colar código da Web que contém código Unicode inesperado pontos (por exemplo, porque um sistema de gerenciamento de conteúdo fez alguma "auto-formatação", como substituir o flUnicode 'LATIN SMALL LIGATURE FL' (U + FB02)).

  2. Condições de corrida : Uma condição de race-condition pode ocorrer, ou seja, uma situação em que o código não está sendo executado na sequência esperada pelo desenvolvedor. As condições de corrida geralmente acontecem em um código multi-thread, mas múltiplas threads não são um requisito para que as condições de corrida sejam possíveis - a assincronicidade é suficiente (e não se confunda, assíncrona não significa que múltiplas threads são usadas sob o capô ).

    Observe que, portanto, o JavaScript também não está livre das condições de corrida apenas porque é de encadeamento único. Veja here um exemplo simples de um único segmento - mas assíncrono. No contexto de uma única declaração, a condição de corrida seria difícil de acertar em JavaScript.

    JavaScript com web workers é um pouco diferente, já que você pode ter vários threads. @mehulmpt nos mostrou uma ótima race-condition .

  3. Efeitos colaterais : Um efeito colateral da operação de comparação de igualdade (que não precisa ser tão óbvia quanto nos exemplos aqui, geralmente os efeitos colaterais são muito sutis).

Esses tipos de problemas podem aparecer em muitas linguagens de programação, não apenas em JavaScript, portanto, não estamos vendo um dos WTFs clássicos do JavaScript aqui 1 .

Claro, a questão da entrevista e as amostras aqui parecem muito artificiais. Mas eles são um bom lembrete de que:

  • Os efeitos colaterais podem ficar realmente desagradáveis ​​e um programa bem projetado deve estar livre de efeitos colaterais indesejados.
  • O estado multi-threading e mutável pode ser problemático.
  • Não fazer a codificação de caracteres e o processamento de strings direito pode levar a erros desagradáveis.

1 Por exemplo, você pode encontrar um exemplo em uma linguagem de programação totalmente diferente (C #) exibindo um efeito colateral (um óbvio) here .





javascript node.js filesystems