【发布时间】:2019-08-07 09:40:32
【问题描述】:
我知道我可以使用 fs.readder() 枚举 nodejs 中文件夹的所有子文件夹
在 *nix 上,我可以从根路径 / 开始
但在 Windows 上,每个驱动器都有自己的根目录,例如 C:\、D:\ 等,并且没有整体根目录。
但我似乎找不到 nodejs 附带的任何东西来给我一个驱动器列表,或者任何像 Windows 下所有驱动器的根目录的东西。
我错过了什么还是有办法做到这一点?
【问题讨论】:
-
Windows API 在 NT API 之上分层。 NT 的根目录位于对象命名空间中,因为在 NT 中几乎所有东西都是对象,而在 Unix 中几乎所有东西都是文件。设备对象已经在 NT 中充当挂载点(例如“\Device\HarddiskVolume2\Windows”),但我们通常使用卷 GUID 和驱动器号挂载点,它们在“\??”中作为对象符号链接实现本地设备目录(合并的本地登录和全局视图)。在 NT API 中,我们可以遍历对象树并尝试查询每个设备对象上的根文件列表(如果有)。
-
上述实现细节对 Windows API 是隐藏的。相反,我们将使用
FindFirstVolumeW和FindNextVolumeW,它们会枚举每个在挂载点管理器中注册并分配了卷GUID 挂载点的卷设备。尝试通过GetVolumePathNamesForVolumeNameW将其映射回驱动器号。然后调用GetLogicalDrives查找映射驱动器和旧驱动器,这些驱动器未在安装点管理器中注册。这为我们提供了“\\?[A-Z]:”和“\\?\Volume{GUID}”挂载点的列表。 node.js 是否提供 FFI 工具来调用 WINAPI 函数?