当前位置:嗨网首页>书籍在线阅读

05-fs.Stats类

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

6.3.1 fs.Stats类

当你使用了 fs.stat()fs.lstat()fs.fstat() 的时候,函数会返回 fs.Stats 对象。 fs.Stats 对象可以检查文件(或者目录)是否存在;也会返回一些其他信息,比如当前文件系统对象是文件还是目录,或者是个UNIX套接字;还可以获取文件权限相关的内容;上次访问或修改对象的时间等。Node为我们提供了一些可以访问这些信息的函数,比如 fs.isFile()fs.isDirectory() 可以区分对象是文件还是目录。你也可以用下面的方法直接访问 stats 数据:

var fs = require('fs');
var util = require('util');
fs.stat('./phoenix5a.png', function(err,stats) {
   if (err) return console.log(err);
   console.log(util.inspect(stats));
});

在Linux中,你会得到类似下面的数据结构:

{ dev: 2048,
  mode: 33204,
  nlink: 1,
  uid: 1000,
  gid: 1000,
  rdev: 0,
  blksize: 4096,
  ino: 1419012,
  size: 219840,
  blocks: 432,
  atime: Thu Oct 22 2015 19:46:41 GMT+0000 (UTC),
  mtime: Thu Oct 22 2015 19:46:41 GMT+0000 (UTC),
  ctime: Mon Oct 26 2015 13:38:03 GMT+0000 (UTC),
  birthtime: Mon Oct 26 2015 13:38:03 GMT+0000 (UTC) }

这基本上是POSIX stat() 函数(可以返回文件的状态)的翻版。其中,日期非常直观,但其他值就不那么直观了。 size 是以字节为单位, blksize 是操作系统中块的大小, blocks 是对象中块的数量。后两个值在Windows中都未定义。

结果中最有意思的一个数据是 mode ,这个值包含了对象的权限,问题是它不完全可读。

此时就需要帮助函数了。在Node中,它是帮助模块。这里推荐 statmode 模块,它会接收一个从函数中(比如 fs.stat() )返回的 stat 对象,并允许我们直接查询数据。例6-1演示了如何使用它来获取有用的文件权限信息。

例6-1 使用 stat-mode 获取文件权限

var fs = require('fs');
var Mode = require('stat-mode');
fs.stat('./phoenix5a.png', function(err,stats) {
   if (err) return console.log(err);
   // get permissions
   var mode = new Mode(stats);
   console.log(mode.toString());
   console.log('Group execute ' + mode.group.execute);
   console.log('Others write ' + mode.others.write);
   console.log('Owner read ' + mode.owner.read);
});

下面是给定文件的输出:

-rw-rw-r--
Group execute false
Others write false
Owner read true