fs: Wie finde ich einen übergeordneten Ordner?

Lesezeit: 4 Minuten

Benutzer-Avatar
schick

Wie schreibe ich dies, um die übergeordneten 2 Ebenen nach oben zu gehen, um eine Datei zu finden?

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

Benutzer-Avatar
Andreas Hase

Versuche dies:

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

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

  • Ich hatte das ohne Glück versucht, aber ich tat es einfach fs.readFile(__dirname + '/../../foo.bar'); und es hat funktioniert.

    – schick

    16. August 2011 um 18:30 Uhr


  • Das vermute ich dann __dirname war so etwas wie '/foo/bar' statt '/foo/bar/'.

    – Andreas Hase

    16. August 2011 um 18:31 Uhr

  • Das allererste ‘/’ in Ihrem Pfad: ‘/../../foo.bar’ ist entscheidend. Ich hatte ‘../../foo.bar’, was mein Problem verursachte.

    – levibostian

    3. Dezember 2016 um 15:02 Uhr

  • warum? nur allgemein warum? kann jemand bitte erklären?

    – eurdakul

    16. Mai 2017 um 15:12 Uhr

  • @eyurdakul Wenn ich es richtig verstehe: __dirname aussehen kann /path/to/your/dirwenn du sagst __dirname + ".." es ist /path/to/your/dir..bei dem es sich um ein nicht vorhandenes Verzeichnis handelt, und nicht /path/to/your. Der Schrägstrich ist wichtig.

    – joulev

    4. April 2020 um 3:51 Uhr

Benutzer-Avatar
Alex Wayne

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

  • diese Antwort mit path.join Ist der richtige Weg, sollte die akzeptierte Antwort nicht befolgt werden, sie löst sogar aus eslint an airbnb-base presetdie Regel no-path-concat im Speziellen

    – schwelgen

    15. Oktober 2017 um 22:03 Uhr

  • 100. positive Bewertung. Mein __dirname war host/src/folder und ich brauchte host/folder und das hat bei mir funktioniert, nicht bei der OP-Antwort.

    – Karkod

    24. Januar 2018 um 14:58 Uhr

  • Sie können noch einen Schritt weiter gehen und es tun path.join(__dirname, '..', '..', 'foo.bar')

    – Herr Niemand

    26. August 2018 um 20:26 Uhr

  • Danke Alex, du hast mich nach 6 Stunden Suche gerettet,

    – SHOHIL SETHIA

    26. Januar 2019 um 2:57 Uhr

Benutzer-Avatar
smremde

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

Der Sinn von path.join() besteht darin, dass der Aufrufer nicht mehr wissen muss, welches Verzeichnistrennzeichen verwendet werden soll (wodurch die Codeplattform unabhängig 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 Wiederholung!

BEARBEITEN: gemäß der Beobachtung von user1767586

  • ‘foo.bar’ sollte ‘foo.bar’ sein. Ich habe versucht, eine Bearbeitung vorzunehmen, aber Bearbeitungen müssen mindestens 6 Zeichen lang sein (dumme Regel, wenn Sie mich fragen, hindert uns daran, kleine Tippfehler wie diese zu bearbeiten).

    – Benutzer1767586

    29. Dezember 2014 um 20:21 Uhr

  • Ich vermute, dass dies die beste Antwort ist. Einige der anderen Antworten könnte Arbeit für eine bestimmte Person auf 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. zB versuche ich, eine Electron-App plattformunabhängig zu schreiben, und obwohl ich es nicht erschöpfend bewiesen habe, vermute ich, dass dies der sicherste Weg ist. Vielen Dank.

    – Andreas Willems

    20. April 2018 um 23:32 Uhr


  • Dies ist eigentlich unnötig, da path.join() verwendet intern path.normalize() (der alle Pfadtrennzeichen in das aktuelle/beabsichtigte Betriebssystemformat umwandelt) auf dem resultierenden verbundenen Pfad, bevor er zurückkehrt. Schaden kann es aber nicht.

    – iono

    29. September 2018 um 6:21 Uhr


Benutzer-Avatar
Jan Foto

Der einfachste Weg wäre die Verwendung path.resolve:

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

Sieht so aus, als würden Sie die brauchen path Modul. (path.normalize im Speziellen)

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

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

Benutzer-Avatar
Jeremy Schlacht

Wenn ein anderes Modul Ihres aufruft und Sie immer noch den Speicherort der Hauptdatei wissen möchten, die ausgeführt wird, 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 tatsächlich ausgeführten Skripts.

Benutzer-Avatar
Jason Brumwell

Wenn Sie sich nicht sicher sind, wo sich der Elternteil befindet, erhalten Sie den Pfad;

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

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

1306500cookie-checkfs: Wie finde ich einen übergeordneten Ordner?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy