我正在使用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,还是我遗漏了一些选项或解决方法?
1条答案
按热度按时间ryhaxcpt1#
显然,我错了,探险家不知何故意识到符号链接,并能够使用它们。
实际情况是,就Windows或SMB卷的任何消费者而言,到文件的符号链接 * 是 * 该文件,到目录的符号链接 * 是 * 该目录。不可能区分链接和该链接的目标。
对我来说幸运的是,我正在编写的代码,虽然在Windows上进行测试,但在部署时将在Docker上的Linux环境中运行。出于测试目的,这个丑陋的黑客帮助:
第一个月
我在Unraid服务器上运行上述命令,在卷的根目录下构建一个符号链接查找。我没有直接使用
lstat
和readlink
,而是在Linux中使用了一个使用真实的lstat
和readlink
的实用程序函数,它将访问NFS共享,而不是SMB,或者在Windows环境中,我使用symlinks.txt
查找文件。