fs: bagaimana cara mencari folder induk?


193

Bagaimana cara saya menulis ini untuk kembali ke level induk 2 untuk menemukan file?

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

Jawaban:


277

Coba ini:

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

Perhatikan garis miring di awal jalur relatif.


25
Saya telah mencobanya tanpa hasil tetapi saya berhasil fs.readFile(__dirname + '/../../foo.bar');dan berhasil.
mewah

6
Saya berasumsi bahwa __dirnameitu adalah sesuatu seperti '/foo/bar'bukan '/foo/bar/'.
Andrew Hare

3
Tanda '/' pertama di jalur Anda: '/../../foo.bar' sangat penting. Saya memiliki '../../foo.bar' yang menyebabkan masalah saya.
levibostian

1
Mengapa? secara umum mengapa? bisakah seseorang tolong jelaskan?
eyurdakul

@eyurdakul Jika saya mengerti corrently: __dirnamemungkin terlihat seperti /path/to/your/dir, jika Anda mengatakan __dirname + ".."itu /path/to/your/dir.., yang merupakan direktori tidak ada, bukan /path/to/your. Tebasan itu penting.
JouleV ada di topanswers.xyz

161

Gunakan 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() akan menangani garis miring / garis depan untuk Anda dan hanya melakukan hal yang benar dan Anda tidak perlu mencoba mengingat ketika garis garis miring ada dan ketika garis miring tidak ada.


4
jawaban ini dengan path.joincara yang benar, jawaban yang diterima tidak harus diikuti, bahkan memicu eslintpada airbnb-base preset, aturan tidak ada jalan-concat khususnya
revelt

Suara ke 100 Saya __dirnameadalah host/src/folderdan saya butuhkan host/folderdan ini bekerja untuk saya, bukan jawaban OP.
carkod

8
Anda dapat mengambil satu langkah lebih jauh dan melakukanpath.join(__dirname, '..', '..', 'foo.bar')
Tn. Tidak ada

Terima kasih Alex, Anda menyelamatkan saya setelah 6 jam pencarian,
SHOHIL SETHIA

95

Saya tahu ini agak pilih-pilih, tetapi semua jawaban sejauh ini kurang tepat.

Titik path.join () adalah untuk menghilangkan kebutuhan pemanggil untuk mengetahui pemisah direktori mana yang harus digunakan (membuat platform kode agnostik).

Secara teknis jawaban yang benar adalah:

var path = require("path");

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

Saya akan menambahkan ini sebagai komentar untuk jawaban Alex Wayne tetapi belum cukup perwakilan!

EDIT: sesuai observasi user1767586


4
'foo.bar "harus' foo.bar '. Saya mencoba mengedit tetapi pengeditan harus minimum 6 karakter (aturan bodoh jika Anda bertanya kepada saya, mencegah kami mengedit kesalahan ketik kecil seperti ini).
user1767586

1
Saya menduga ini adalah jawaban terbaik. Beberapa jawaban lain mungkin bekerja untuk individu yang diberikan pada sistem operasi yang diberikan, tetapi kehadiran jenis pemisah hierarki file tertentu (yaitu slash) dalam jawaban-jawaban lain membuat saya bertanya-tanya seberapa universal mereka. misalnya saya mencoba untuk menulis aplikasi Elektron dengan cara agnostik platform dan, sementara saya belum membuktikannya secara lengkap, saya menduga ini adalah cara teraman. Terima kasih.
Andrew Willems

Ini sebenarnya tidak perlu, karena path.join () secara internal menggunakan path.normalize () (yang mengubah semua pemisah jalur ke format OS saat ini / yang dituju) pada jalur gabungan yang dihasilkan sebelum kembali. Tidak ada salahnya.
iono


12

Sepertinya Anda akan membutuhkan pathmodul. ( path.normalizekhususnya)

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

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

11

Jika modul lain memanggil modul Anda dan Anda masih ingin tahu lokasi file utama sedang dijalankan, Anda dapat menggunakan modifikasi kode @ Jason:

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

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

Dengan begitu Anda akan mendapatkan lokasi skrip benar-benar dijalankan.


8

Jika Anda tidak positif di mana orang tua berada, ini akan memberi Anda jalan;

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

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

5

Kamu bisa memakai

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

2

Saya menjalankan aplikasi elektron dan saya bisa mendapatkan folder induk dengan path.resolve ()

level induk 1:path.resolve(__dirname, '..') + '/'

level induk 2:path.resolve(__dirname, '..', '..') + '/'


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.