使用Node.js识别文件系统根目录

18

我正在执行一个基本操作,从给定的目录开始遍历文件系统,直到达到根目录。 在Linux / Mac上,根目录显然是 / ,而在Windows上可以是 C:\ 或其他驱动器号。我的问题是:Node.js是否有办法识别文件系统的根目录。

目前,我只能通过检查最后一个目录是否等于 path.normalize(dir + "/../") 来判断是否已经到达了根目录。是否存在 process 属性/方法或模块,可以帮助我解决这个问题?


1
如果在Windows上运行,您想要哪个驱动器号?系统驱动器?包含正在运行脚本的驱动器?包含另一个文件的驱动器?硬编码的驱动器号? - icktoofay
我认为“/”在两个平台上都可以使用。你会用它做什么? - Domenic
在Windows操作系统中:开始 > 运行 > cmd.exe。 C:\ Users \ Domenic> cd /。可以直接进入 C:\> 目录。 - Domenic
@icktoofay 我会基于 process.cwd() 开始,也就是基于生成 Node 脚本的线程。 - Dominic Barnes
4个回答

24

另一个例子,使用 path.parse

const path = require('path')

const getRootDir = () => path.parse(process.cwd()).root

8
这个不起作用吗?
var path = require("path");
var os = require("os");
var root = (os.platform == "win32") ? process.cwd().split(path.sep)[0] : "/"

1
值得一提的是,在Node 0.12.4中(不确定其他版本),您需要将os.platform作为函数使用,因此您需要执行os.platform() - webketje
2
在v6.9.4中,它是os.platform()。 - Anshuman Singh
1
更好的做法是将 os.platform 更改为 process.platform,无需使用 os - styfle

1

对于 Node.js 并没有什么特别需要做的,答案是一个简单的正则表达式:

/^([^\\/]*[\\/]).*/.test(process.cwd())
var root = RegExp.$1;

这应该可以获取 Windows 和 Linux 的当前工作目录的根目录。


/^([^\\/]*[\\/]).*/.exec(process.cwd())[1] 更容易阅读。 - Shukri Adams

1

我认为最简单的方法就是检查path.dirname是否返回与输入路径相同的路径:如果是,则它就是根目录。

const { dirname } = require('path');

// On Linux, MacOS or other POSIX-like file-systems:
dirname("/") === "/"       // -> true
// On Windows:
dirname("C:\\") === "C:\\" // -> true

这是来自 Node.js (v14) REPL 的一个示例输出。请注意,path 将自动解析为 path.win32path.posix,具体取决于您的系统,因此您不必担心平台兼容性:
> path.posix.dirname("/") === "/"
true
> path.win32.dirname("C:\\") === "C:\\"
true

所以如果你想要一个实用函数,你可以这样做:

const isRoot = (path) => dirname(path) === path

...或者如果你想遍历父级直到根节点,你可以这样做:

function parent(path) {
  const parentPath = dirname(path);

  return parentPath === path ? null : parentPath;
}

let path = process.cwd();

do {
  console.log(path);
} while (path = parent(path))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接