fs: Wie finde ich einen übergeordneten Ordner?


193

Wie schreibe ich das, um die übergeordneten 2 Ebenen wieder aufzusuchen und eine Datei zu finden?

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

Antworten:


277

Versuche dies:

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

Beachten Sie den Schrägstrich am Anfang des relativen Pfads.


25
Ich hatte das ohne Glück versucht, aber ich tat fs.readFile(__dirname + '/../../foo.bar');es einfach und es funktionierte.
Lust auf den

6
Ich __dirnamegehe dann davon aus, dass das '/foo/bar'eher so war als '/foo/bar/'.
Andrew Hare

3
Das allererste '/' auf Ihrem Weg: '/../../foo.bar' ist entscheidend. Ich hatte '../../foo.bar', was mein Problem verursachte.
Levibostian

1
Warum? nur allgemein warum? kann mir bitte jemand erklären
Eyurdakul

@eyurdakul Wenn ich es corrently verstehen: __dirnameaussehen kann /path/to/your/dir, wenn Sie sagen , __dirname + ".."es ist /path/to/your/dir.., was ein nicht vorhandenes Verzeichnis ist, statt /path/to/your. Der Schrägstrich ist wichtig.
JouleV ist bei topanswers.xyz

161

Verwenden Sie 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() übernimmt führende / nachfolgende Schrägstriche für Sie und tut einfach das Richtige, und Sie müssen sich nicht daran erinnern, wann nachfolgende Schrägstriche vorhanden sind und wann nicht.


4
diese Antwort mit path.joinist der richtige Weg, die akzeptierte Antwort sollte nicht gefolgt werden, es selbst löst eslintauf airbnb-base preset, die Regel nicht-Weg-concat insbesondere
revelt

100. Gegenstimme. Mein __dirnamewar host/src/folderund ich brauchte host/folderund das funktionierte für mich, nicht die OP-Antwort.
Carkod

8
Sie können noch einen Schritt weiter gehen und tunpath.join(__dirname, '..', '..', 'foo.bar')
Mr. Nobody

Danke Alex, du hast mich nach 6 Stunden Suche gerettet,
SHOHIL SETHIA

95

Ich weiß, dass es ein bisschen wählerisch ist, aber alle Antworten sind bisher nicht ganz richtig.

Der Punkt von path.join () besteht darin, dass der Aufrufer nicht mehr wissen muss, welches Verzeichnistrennzeichen verwendet werden soll (wodurch die Codeplattform agnostisch wird).

Technisch gesehen wäre die richtige Antwort so etwas wie:

var path = require("path");

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

Ich hätte dies als Kommentar zu Alex Waynes Antwort hinzugefügt, aber noch nicht genug Wiederholungen!

BEARBEITEN: gemäß der Beobachtung von user1767586


4
'foo.bar "sollte' foo.bar 'sein. Ich habe versucht, eine Bearbeitung vorzunehmen, aber die Änderungen müssen mindestens 6 Zeichen lang sein (dumme Regel, wenn Sie mich fragen, verhindert, dass wir kleine Tippfehler wie diese bearbeiten).
user1767586

1
Ich vermute, dass dies die beste Antwort ist. Einige der anderen Antworten funktionieren möglicherweise für eine bestimmte Person unter einem bestimmten Betriebssystem, aber das Vorhandensein einer bestimmten Art von Dateihierarchie-Trennzeichen (dh des Schrägstrichs) in diesen anderen Antworten lässt mich fragen, wie universell sie sind. Ich versuche beispielsweise, eine Electron-App plattformunabhängig zu schreiben, und obwohl ich dies nicht vollständig bewiesen habe, vermute ich, dass dies der sicherste Weg ist. Vielen Dank.
Andrew Willems

Dies ist eigentlich nicht erforderlich, da path.join () intern path.normalize () (das alle Pfadtrennzeichen in das aktuelle / beabsichtigte Betriebssystemformat umwandelt) für den resultierenden verbundenen Pfad verwendet, bevor es zurückkehrt. Es kann aber nicht schaden.
Iono


12

Sieht so aus, als ob Sie das pathModul benötigen . ( path.normalizeinsbesondere)

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

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

11

Wenn ein anderes Modul Ihr Modul aufruft und Sie dennoch den Speicherort der ausgeführten Hauptdatei wissen möchten, können Sie eine Änderung des Codes von @ Jason verwenden:

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

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

Auf diese Weise erhalten Sie den Speicherort des Skripts, das tatsächlich ausgeführt wird.


8

Wenn Sie nicht sicher sind, wo sich die Eltern befinden, erhalten Sie den richtigen Weg.

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

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

5

Sie können verwenden

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

2

Ich verwende eine Elektronen-App und kann den übergeordneten Ordner über path.resolve () abrufen.

Elternteil 1 Stufe:path.resolve(__dirname, '..') + '/'

Eltern 2 Ebenen:path.resolve(__dirname, '..', '..') + '/'


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.