关键问题是,如果符号链接指向的源文件不存在,但(现在已死)符号链接仍然存在,则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。
答案 0 :(得分:12)
请尝试fs.lstat和fs.readlink。即使目标不存在,lstat
也应该为符号链接提供stats对象,readlink
应该为您提供目标路径,这样您就可以组合该逻辑来正确识别断开的链接。 / p>