Knoten js Ordnerpfad aus einer Datei abrufen


90

Gibt es eine Möglichkeit, den Pfad zu einem Ordner abzurufen, der eine bestimmte Datei enthält?

fs.realpathSync('config.json', []);

gibt so etwas wie zurück

G:\node-demos\7-node-module\demo\config.json

ich brauche einfach

G:\node-demos\7-node-module\demo\ 
or
G:\node-demos\7-node-module\demo\

Gibt es eine API dafür oder muss ich den String verarbeiten?

Antworten:


163

Verwenden Sie path.dirname

// onlyPath should be G:\node-demos\7-handlebars-watch\demo
var onlyPath = require('path').dirname('G:\\node-demos\\7-node-module\\demo\\config.json');

1
Verdoppeln Sie Ihre Backslashes, sonst entkommen Sie zufälligen Zeichen.
20онстантин Ван

1
Wenn Sie mit einem relativen Pfad wie in der ursprünglichen Frage beginnen, würden Sie tunlet onlyPath = path.dirname(fs.realpathSync('config.json'));
Kip

Ich würde immer die @ Kip-Methode verwenden wollen, realpathSyncdie absolute und relative Pfade
abdeckt

5

require("path").dirname(……) Unterbricht, wenn Ihr Pfad sein Verzeichnis nicht explizit angibt.

require("path").dirname("./..")
// "."

Sie können require("path").join(……, "../")stattdessen verwenden. Es bleibt auch der nachlaufende Abscheider erhalten.

require("path").join("whatever/absolute/or/relative", "../")
// "whatever/absolute/or/" (POSIX)
// "whatever\\absolute\\or\\" (Windows)
require("path").join(".", "../")
// "../" (POSIX)
// "..\\" (Windows)
require("path").join("..", "../")
// "../../" (POSIX)
// "..\\..\\" (Windows)
require("path").win32.join("C:\\", "../")
// "C:\\"

5

Einfach pathModul installieren und verwenden,

var path = require('path');
path.dirname('G:\\node-demos\\7-node-module\\demo\\config.json')

// Returns: 'G:\node-demos\7-node-module\demo'

Dies scheint identisch mit der akzeptierten Antwort zu sein, die 5 Jahre zuvor veröffentlicht wurde
KyleMit
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.