Wie schreibe ich dies, um die übergeordneten 2 Ebenen nach oben zu gehen, um eine Datei zu finden?
fs.readFile(__dirname + 'foo.bar');
schick
Wie schreibe ich dies, um die übergeordneten 2 Ebenen nach oben zu gehen, um eine Datei zu finden?
fs.readFile(__dirname + 'foo.bar');
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/dir
wenn 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
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 preset
die 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
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
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"));
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.
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');