Having trouble understanding how fs.stat() works

后端 未结 2 1477
情深已故
情深已故 2021-02-07 06:00

I\'m trying to write a function that tells me is a certain path is a directory.

var fs = require(\'fs\');
console.log(\"+++++++++++++++++++++++++++++++++++++++\"         


        
相关标签:
2条回答
  • 2021-02-07 06:28

    How fs.stat() works ?

    If you want to use a callback/async fs function, don't use the synchronous version, use fs.stat() :

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

    There is more information about fs.stat(). You can get a lot of information about the main object :

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

    Output :

    { 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' }
    

    Lots of elements is often useless for us, yes. But here is the signification of all of these variables, according to this article :

    • dev: ID of the device containing the file
    • mode: file protection
    • nlink: number of hard links to the file
    • uid: user ID of the file’s owner.
    • gid: group ID of the file’s owner.
    • rdev: device ID if the file is a special file.
    • blksize: block size for file system I/O.
    • ino: File inode number. An inode is a file system data structure that -
    • stores information about a file.
    • size: file total size in bytes.
    • blocks: number of blocks allocated for the file.
    • atime: date object representing the file’s last access time.
    • mtime: date object representing the file’s last modification time.
    • ctime: date object representing the last time the file’s inode was changed.

    You can also, like nodeJS documentation says, get more information like :

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

    About stats.isSymbolicLink(), there is another function than fs.stat, called fs.lstat(), and here is the difference between them :

    • stat follows symlinks. When given a path that is a symlink, it returns the stat of the target of the symlink.
    • lstat doesn't follow symlinks. When given a path that is a symlink it returns the stat of the symlink and not its target.
    0 讨论(0)
  • 2021-02-07 06:31

    You are using the synchronous version, which doesn't use a callback. It simply returns the result instead. So either use the async form fs.stat(path, callback) or use the sync form like this:

    var fs = require('fs');
    console.log("+++++++++++++++++++++++++++++++++++++++");
    var stats = fs.statSync(pathname);
    console.log(stats.isDirectory());
    console.log("+++++++++++++++++++++++++++++++++++++++");
    
    0 讨论(0)
提交回复
热议问题