关键问题是,如果符号链接指向的源文件不存在,但(现在已死)符号链接仍然存在,fs.exists(symlink)
则将返回false
.
这是我的测试用例:
var fs = require("fs"); var src = __dirname + "/src.txt"; var dest = __dirname + "/dest.txt"; // create a file at src fs.writeFile(src, "stuff", function(err) { // symlink src at dest fs.symlink(src, dest, "file", function(err) { // ensure dest exists fs.exists(dest, function(exists) { console.log("first exists", exists); // unlink src fs.unlink(src, function(err) { // ensure dest still exists fs.exists(dest, function(exists) { console.log("exists after unlink src", exists); }); }); }); }); });
结果是:
first exists true exists after unlink src false // symlink still exists, why is it false??
出现问题是因为我想创建一个符号链接(如果它不存在),或者取消链接并重新创建它(如果存在).目前我正在使用fs.exists来执行此检查,但遇到了这个问题.除了没有同样问题的fs.exists之外还有什么选择?
在Windows 7上的CentOS Vagrant上使用节点10.
请尝试使用fs.lstat和fs.readlink.lstat
即使目标不存在,也readlink
应该为符号链接提供stats对象,并且应该为您提供目标的路径,这样您就可以组合该逻辑来正确识别断开的链接.