2011-12-20 7 views
8

काम करता है मैं एक ऐसा फ़ंक्शन लिखने की कोशिश कर रहा हूं जो मुझे बताता है कि एक निश्चित पथ निर्देशिका है।यह समझने में परेशानी हो रही है कि fs.stat()

var fs = require('fs'); 
console.log("+++++++++++++++++++++++++++++++++++++++"); 
fs.statSync(pathname, function(err, stats) { 
    console.log(stats.isDirectory()); 
}); 
console.log("+++++++++++++++++++++++++++++++++++++++"); 

हालांकि, यह कभी भी जवाब प्रिंट नहीं करता है।

यदि पथनाम मौजूद है - यह फ़ंक्शन को कॉल नहीं करता है। यदि यह अस्तित्व में नहीं है, तो यह एक अपवाद उत्पन्न करता है: ENOENT not a file or directory। मैं नहीं जानना चाहता कि यह पथनाम मौजूद है, लेकिन मैं जानना चाहता हूं कि यह निर्देशिका है या नहीं।

क्या कोई इसे ठीक करने में मेरी सहायता कर सकता है?

उत्तर

24

आप सिंक्रोनस संस्करण का उपयोग कर रहे हैं, जो कॉलबैक का उपयोग नहीं करता है। यह इसके बजाय परिणाम देता है। तो async रूप fs.stat(path, callback) का उपयोग करें या इस तरह सिंक फार्म का उपयोग या तो:

var fs = require('fs'); 
console.log("+++++++++++++++++++++++++++++++++++++++"); 
var stats = fs.statSync(pathname); 
console.log(stats.isDirectory()); 
console.log("+++++++++++++++++++++++++++++++++++++++"); 
+0

उत्कृष्ट, धन्यवाद! –

1

कैसे fs.stat() काम करता है?

var fs = require('fs'); 
console.log("+++++++++++++++++++++++++++++++++++++++"); 
fs.stat(pathname, function(err, stats) { 
    console.log(stats.isDirectory()); 
}); 
console.log("+++++++++++++++++++++++++++++++++++++++"); 

fs.stat() बारे में अधिक जानकारी नहीं है:

आप एक कॉलबैक/async FS समारोह का उपयोग करने के, तुल्यकालिक संस्करण का उपयोग नहीं करना चाहते हैं, fs.stat() का उपयोग करें। आप मुख्य उद्देश्य के बारे में जानकारी का एक बहुत कुछ प्राप्त कर सकते हैं:

fs.stat(path, function(err, stats) { 
     console.log(stats) 
} 

आउटपुट:

{ dev: 2049, 
    ino: 305352, 
    mode: 16877, 
    nlink: 12, 
    uid: 1000, 
    gid: 1000, 
    rdev: 0, 
    size: 4096, 
    blksize: 4096, 
    blocks: 8, 
    atime: '2009-06-29T11:11:55Z', 
    mtime: '2009-06-29T11:11:40Z', 
    ctime: '2009-06-29T11:11:40Z' } 

तत्वों के बहुत सारे हैं, अक्सर हमारे लिए बेकार है हाँ। लेकिन यहाँ इनके सभी की सार्थकता, according to this article है:

  • देव: फ़ाइल वाले डिवाइस के आईडी
  • मोड: फ़ाइल सुरक्षा
  • nlink: हार्ड लिंक के संख्या फ़ाइल
  • uid: फ़ाइल के मालिक का उपयोगकर्ता आईडी।
  • ग्रिड: फ़ाइल के मालिक की समूह आईडी।
  • rdev: डिवाइस आईडी यदि फ़ाइल एक विशेष फ़ाइल है।
  • blksize: फ़ाइल सिस्टम I/O के लिए ब्लॉक आकार।
  • इनो: फ़ाइल इनोड नंबर। एक इनोड एक फ़ाइल सिस्टम डेटा संरचना है जो -
  • किसी फ़ाइल के बारे में जानकारी संग्रहीत करता है।
  • आकार: बाइट्स में कुल आकार फ़ाइल।
  • ब्लॉक: फ़ाइल के लिए आवंटित ब्लॉक की संख्या।
  • एटीम: दिनांक वस्तु फ़ाइल के अंतिम पहुंच समय का प्रतिनिधित्व करती है।
  • mtime: दिनांक वस्तु फ़ाइल के अंतिम संशोधन समय का प्रतिनिधित्व करती है।
  • ctime: दिनांक वस्तु आखिरी बार फ़ाइल का इनोड बदल गया था।

    stats.isFile() 
    stats.isDirectory() 
    stats.isBlockDevice() 
    stats.isSymbolicLink() (only valid with fs.lstat()) 
    stats.isCharacterDevice() 
    stats.isFIFO() 
    stats.isSocket() 
    

    stats.isSymbolicLink() के बारे में, वहाँ fs.stat से एक और समारोह, कहा जाता fs.lstat() है, और यहाँ:

तुम भी, nodeJS documentation says की तरह, और अधिक जानकारी प्राप्त कर सकते हैं की तरह उनके बीच अंतर है:

  • stat सिम्लिंक का पालन करता है। जब एक सिमलिंक वाला पथ दिया जाता है, तो यह सिम्लिंक के लक्ष्य की स्थिति देता है।
  • lstat सिम्लिंक का पालन नहीं करता है। जब एक सिमलिंक वाला पथ दिया जाता है तो यह सिम्लिंक की स्थिति देता है, न कि उसका लक्ष्य।
संबंधित मुद्दे