Node.js如何跨平台判断两个路径是否位于同一磁盘
Node.js判断两个路径是否属于同磁盘的实现方案
跨平台通用方案
无需区分操作系统,直接通过Node.js内置fs模块的设备ID属性判断即可,全平台兼容:
- 实现逻辑:同一个磁盘/挂载分区下的所有文件、目录,调用
fs.stat()返回的Stats对象中dev(设备ID)属性值完全一致,只需对比两个路径的dev值是否相等即可完成判断。
代码示例:
// 异步实现 const fs = require('fs/promises'); async function isSameDisk(path1, path2) { try { const [stat1, stat2] = await Promise.all([ fs.stat(path1), fs.stat(path2) ]); return stat1.dev === stat2.dev; } catch (err) { // 路径不存在或无权限访问时的异常处理 throw err; } } // 同步实现 const fsSync = require('fs'); function isSameDiskSync(path1, path2) { try { const stat1 = fsSync.statSync(path1); const stat2 = fsSync.statSync(path2); return stat1.dev === stat2.dev; } catch (err) { throw err; } }
注意:
- 如果需要跟随软链接指向的真实路径判断磁盘归属,使用
fs.stat();如果需要判断软链接本身所在的磁盘,替换为fs.lstat()即可。- 该方案兼容所有Node.js支持的操作系统,包括Windows、macOS、Linux,不需要额外做系统适配。
分系统独立实现(可选)
如果需要手动按系统逻辑实现,可以参考以下方案:
Windows系统
通过path.parse()获取路径根目录匹配盘符即可:
const path = require('path'); function isSameDiskWin(path1, path2) { return path.parse(path1).root.toLowerCase() === path.parse(path2).root.toLowerCase(); }
macOS/Linux系统
通过系统df命令获取路径对应的挂载点,对比挂载点是否一致即可:
const { execSync } = require('child_process'); function getMountPointUnix(targetPath) { return execSync(`df "${targetPath.replace(/"/g, '\\"')}" | awk 'NR==2 {print $6}'`, { encoding: 'utf8' }).trim(); } function isSameDiskUnix(path1, path2) { return getMountPointUnix(path1) === getMountPointUnix(path2); }
内容的提问来源于stack exchange,提问作者David Burson
相关产品推荐
相关产品推荐

