Node.js `fs.lstat`和`fs.readlink`无法识别Windows中的符号链接

ajsxfq5m  于 11个月前  发布在  Node.js
关注(0)|答案(1)|浏览(94)

我正在使用SMB访问Windows上的Unraid共享。Windows资源管理器可以跟踪此共享上的符号链接,因此我知道Windows上的SMB协议在处理符号链接方面并没有完全失败。
然而,Node.js的fs.lstat()isSymbolicLink()在返回统计数据时总是告诉我false。(人们在使用stat而不是lstat时遇到过这个问题,但这不是这里的问题。)fs.readlink()会导致错误。


的数据
我可以向你保证这真的是一个象征性的联系:



.在资源管理器中双击007文件夹可以正确显示链接的目标。
我在Windows 11上使用Node.JS v18.17.1。我在WSL中使用Node.js时遇到了同样的问题,查看相同的挂载SMB共享。WSL本身并不将链接视为链接。



这是某种Node.js的bug,还是我遗漏了一些选项或解决方法?

ryhaxcpt

ryhaxcpt1#

显然,我错了,探险家不知何故意识到符号链接,并能够使用它们。
实际情况是,就Windows或SMB卷的任何消费者而言,到文件的符号链接 * 是 * 该文件,到目录的符号链接 * 是 * 该目录。不可能区分链接和该链接的目标。
对我来说幸运的是,我正在编写的代码,虽然在Windows上进行测试,但在部署时将在Docker上的Linux环境中运行。出于测试目的,这个丑陋的黑客帮助:
第一个月
我在Unraid服务器上运行上述命令,在卷的根目录下构建一个符号链接查找。我没有直接使用lstatreadlink,而是在Linux中使用了一个使用真实的lstatreadlink的实用程序函数,它将访问NFS共享,而不是SMB,或者在Windows环境中,我使用symlinks.txt查找文件。

相关问题