SORU
19 Aralık 2010, Pazar


Eğer dosya/dizin node.js varsa eşzamanlı olarak kontrol edin

Nasıl eşzamanlı olarak kontrol edin, kullanmanode.jsya da dizini mevcut bir dosya?

CEVAP
19 Aralık 2010, Pazar


Bu sorunun cevabı, yıllar içinde değişti, şu anda oluşmaktadır:

  • 2010 orijinal cevap
    (stat/statSync ya lstat/lstatSync)
  • Eylül 2012 Güncelleştirin
    (exists/existsSync,şimdi görünüşe göre onaylanmaz)
  • Şubat 2015 Güncelleştirin
    (Muhtemelenstat/statSync ya 12*/lstatSync*döndük yaklaşan admin belirterek, )

Burada kronolojik sırayla:

2010 orijinal cevabı:

statSync ya fs.Stats object verenlstatSync (docs link), kullanabilirsiniz. Eğer bir fonksiyonun zaman uyumlu bir sürümü varsa, genel olarak, sonunda Sync ile uyumsuz sürümü olarak aynı ada sahip olacaktır. statSync stat; lstatSync eşzamanlı sürümü lstat, vb zaman uyumlu sürümüdür.

lstatSync size, her ikisinin olmadığı bir şey var, ve eğer öyleyse, ister bir dosya veya dizin (veya bazı dosya sistemleri, bir sembolik bağlantı, blok aygıt, karakter aygıt, vb.), eğer bir dizin varsa bilmek gerekiyorsa örneğin:

var fs = require('fs');
try {
    // Query the entry
    stats = fs.lstatSync('/the/path');

    // Is it a directory?
    if (stats.isDirectory()) {
        // Yes it is
    }
}
catch (e) {
    // ...
}

...ve aynı şekilde eğer bir dosya varsa, isFile; eğer bir blok aygıt varsa, isBlockDevice, var, vb., vb. Eğer giriş hiç yok eğer doğru değilse try/catch; Bu bir hata atar unutmayın.

Giriş umurunda değilve sadece var olup olmadığını bilmek istiyorum, path.existsSync ya da en son, 28**) noted by user618408 olarak kullanabilirsiniz:

var path = require('path');
if (path.existsSync("/the/path")) { // or fs.existsSync
    // ...
}

Orada sadece try/catch gerektirmez ama olay ne hakkında bilgi verir.path uzun zaman önce bulunmamıştı.


Yan not: açıkça kontrol etmek için nasıl olduğunu sordumeşzamanlı olarakyukarıdaki fonksiyonları xyzSync sürümlerini kullandım. Ama mümkün olan her yerde, G/Ç ile, bu gerçekten en iyi senkron aramaları önlemek için. G/Ç alt sistem çağrıları görüş CPU açısından önemli bir zaman alır. Nasıl arama kolaydır not lstatSync yerine lstat:

// Is it a directory?
lstat('/the/path', function(err, stats) {
    if (!err && stats.isDirectory()) {
        // Yes it is
    }
});

Ama eğer senkron sürüm gerekiyorsa, orada.

Eylül 2012 Güncelleştirin

Birkaç yıl önce gelen cevap aşağıda şimdi biraz modası geçmiş durumda. Mevcut yolu kullanmak fs.existsSync bir senkron kontrol etmek için dosya/dizin varlığı (ya da elbette fs.exists için bir zaman uyumsuz kontrol) yerine path sürüm aşağıda.

Örnek:

var fs = require('fs');

if (fs.existsSync(path)) {
    // Do something
}

// Or

fs.exists(path, function(exists) {
    if (exists) {
        // Do something
    }
});

Şubat 2015 Güncelleştirin

Ve burada 2015 yılında olduğumuzu ve Düğüm docs şimdi fs.existsSync (fs.exists) "onaylanmaz". (Çünkü Düğüm Millet aptal bir şeydir ki açmadan önce var olup olmadığını kontrol etmek için olduğunu düşünüyorum; ama bir şey var olup olmadığını kontrol etmek için tek sebep bu değil!)

Bu yine değişmediği sürece muhtemelen sync çeşitli yöntemler için.../Kadar geldik, tabii ki.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Matt Steffanina

    Matt Steffan

    1 EYLÜL 2011
  • Sean Murphy

    Sean Murphy

    4 ŞUBAT 2009
  • Shameless Maya

    Shameless Ma

    24 Mayıs 2012