fs: ¿cómo ubico una carpeta principal?


193

¿Cómo escribo esto para volver a los niveles de padre 2 para encontrar un archivo?

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

Respuestas:


277

Prueba esto:

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

Tenga en cuenta la barra diagonal al comienzo de la ruta relativa.


25
Lo había intentado sin suerte, pero lo hice fs.readFile(__dirname + '/../../foo.bar');y funcionó.
elegante

66
Supongo que eso __dirnamefue algo así como '/foo/bar'no '/foo/bar/'.
Andrew Hare

3
El primer '/' en su ruta: '/../../foo.bar' es crucial. Tenía '../../foo.bar' que estaba causando mi problema.
levibostian

1
¿por qué? solo en general ¿por qué? alguien puede por favor explicar?
eyurdakul

@eyurdakul Si entiendo que corrently: __dirnamepuede parecer /path/to/your/dir, si usted dice __dirname + ".."que es /path/to/your/dir.., que es un directorio que no existe, en lugar de /path/to/your. El corte es importante.
JouleV está en topanswers.xyz

161

Utilice 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() manejará las barras diagonales / finales por usted y simplemente hará lo correcto y no tendrá que intentar recordar cuándo existen las barras diagonales finales y cuándo no.


44
esta respuesta con path.joines la forma correcta, la respuesta aceptada no debe ser seguido, incluso desencadena eslinten airbnb-base presetla regla de no-path-concat en particular
Revelt

100o voto a favor. Mi __dirnameera host/src/foldery necesitaba host/foldery esto funcionó para mí, no la respuesta OP.
carkod

8
puedes ir un paso más allá y hacerlopath.join(__dirname, '..', '..', 'foo.bar')
Mr.Nobody

Gracias Alex, me salvaste después de 6 horas de búsqueda,
SHOHIL SETHIA

95

Sé que es un poco exigente, pero todas las respuestas hasta ahora no son correctas.

El punto de path.join () es eliminar la necesidad de que la persona que llama sepa qué separador de directorio usar (haciendo que la plataforma de código sea independiente).

Técnicamente, la respuesta correcta sería algo como:

var path = require("path");

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

¡Hubiera agregado esto como un comentario a la respuesta de Alex Wayne, pero todavía no tengo suficiente representante!

EDITAR: según la observación del usuario 1767586


44
'foo.bar "debería ser' foo.bar '. Traté de hacer una edición, pero las ediciones deben tener un mínimo de 6 caracteres (una regla estúpida si me pregunta, nos impide editar pequeños errores tipográficos como este).
user1767586

1
Sospecho que esta es la mejor respuesta. Algunas de las otras respuestas podrían funcionar para un individuo determinado en un sistema operativo dado, pero la presencia de un tipo específico de separador de jerarquía de archivos (es decir, la barra oblicua) en esas otras respuestas me hace preguntarme cuán universales son. Por ejemplo, estoy tratando de escribir una aplicación Electron de manera independiente de la plataforma y, aunque no lo he probado exhaustivamente, sospecho que esta es la forma más segura. Gracias.
Andrew Willems

Esto es realmente innecesario, ya que path.join () usa internamente path.normalize () (que transforma todos los separadores de ruta al formato del sistema operativo actual / previsto) en la ruta unida resultante antes de regresar. Sin embargo, no puede doler.
iono


12

Parece que necesitarás el pathmódulo. ( path.normalizeen particular)

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

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

11

Si otro módulo llama al suyo y aún desea saber la ubicación del archivo principal que se está ejecutando, puede usar una modificación del código de @ Jason:

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

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

De esa forma obtendrá la ubicación del script que se está ejecutando realmente.


8

Si no está seguro de dónde está el padre, esto le dará el camino;

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

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


2

Estoy ejecutando la aplicación de electrones y puedo obtener la carpeta principal por path.resolve ()

Nivel padre 1:path.resolve(__dirname, '..') + '/'

padres 2 niveles:path.resolve(__dirname, '..', '..') + '/'


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.