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?

blessenm
quelle

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');
hereandnow78
quelle
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:\\"
Константин Ван
quelle
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'
Subhashi
quelle
Dies scheint identisch mit der akzeptierten Antwort zu sein, die 5 Jahre zuvor veröffentlicht wurde
KyleMit