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