2014-04-23 13 views
7

Kluczowym problemem jest to, że jeśli plik źródłowy, do którego wskazuje dowiązanie symboliczne, nie istnieje, ale dowiązanie symboliczne (obecnie martwe) nadal istnieje, wówczas fs.exists(symlink) zwróci false.Sprawdź, czy istnieje dowiązanie symboliczne w pliku node.js

Oto mój przypadek testowy:

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); 
       }); 
      }); 
     }); 
    }); 
}); 

Wynikiem tego jest:

first exists true 
exists after unlink src false // symlink still exists, why is it false?? 

Problem pojawia się, ponieważ chcę, aby utworzyć dowiązania, jeśli nie istnieje, lub odłączyć go i ponownie go utworzyć, jeśli tak. Obecnie używam fs.exists, aby wykonać tę kontrolę, ale wpadł na ten problem. Czym jest alternatywa poza fistesistami, którzy nie będą mieli tego samego problemu?

Korzystanie węźle 10 na CentOS Vagrant na Windows 7.

Odpowiedz

8

Spróbuj fs.lstat i fs.readlink zamiast. lstat powinien dać ci obiekt statystyk dla dowiązania symbolicznego, nawet jeśli cel nie istnieje, a readlink powinien ci podać ścieżkę do celu, więc możesz połączyć tę logikę, aby poprawnie zidentyfikować niedziałające linki.

Powiązane problemy