最新版本号[免费下载]

Node入门系列之File System文件系统模块

作者:本站编辑 发布时间:2015-11-24 来源:本站原创 点击数:

文件的I/O是由标准POSIX函数封装而成。需要使用require(‘fs’)访问这个模块。所有的方法都提供了异步和同步两种方式。

异步形式下,方法的最后一个参数需要传入一个执行完成时的回调函数。传给回调函数的参数取决于具体的异步方法,但第一个参数总是保留给异常对象。如果操作成功,那么该异常对象就变为null或者undefined。

这里是一个异步调用的例子:

var fs = require(‘fs‘);
 
fs.unlink(‘/tmp/hello‘, function (err) {
  if (err) throw err;
  console.log(‘successfully deleted /tmp/hello‘);
});

这里是进行相同操作的同步调用的例子:

var fs = require(‘fs‘);
 
fs.unlinkSync(‘/tmp/hello‘)
console.log(‘successfully deleted /tmp/hello‘);

由于异步方法调用无法保证执行的顺序,所以下面的代码容易导致出现错误。

fs.rename(‘/tmp/hello‘, ‘/tmp/world‘, function (err) {
  if (err) throw err;
  console.log(‘renamed complete‘);
});
fs.stat(‘/tmp/world‘, function (err, stats) {
  if (err) throw err;
  console.log(‘stats: ‘ + JSON.stringify(stats));
});

这样做有可能导致fs.stat在fs.rename之前执行,正确的做法是链式调用回调函数。

fs.rename(‘/tmp/hello‘, ‘/tmp/world‘, function (err) {
  if (err) throw err;
  fs.stat(‘/tmp/world‘, function (err, stats) {
    if (err) throw err;
    console.log(‘stats: ‘ + JSON.stringify(stats));
  });
});

当需要频繁操作时,强烈建议使用异步方法。同步方式在其完成之前将会阻塞当前的整个进程,即搁置所有连接。

fs.rename(path1, path2, [callback])
异步调用rename(2),重命名某个文件,除非回调函数执行过程出现了异常,否则不会传递任何参数。

fs.renameSync(path1, path2)
同步调用重命名rename(2),重命名某个文件。

fs.truncate(fd, len, [callback])
异步调用ftruncate(2),截断某个文件,除非回调函数执行过程出现了异常,否则不会传递任何参数。

fs.truncateSync(fd, len)
同步调用重命名ftruncate(2),截断某个文件s。

fs.chmod(path, mode, [callback])
异步调用chmod(2),修改文件权限,除非回调函数执行过程出现了异常,否则不会传递任何参数。

fs.chmodSync(path, mode)
同步调用chmod(2),修改文件权限。

fs.stat(path, [callback])
异步调用stat(2),读取文件元信息,回调函数将返回两个参数(err, stats),其中stats是fs.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‘
}
本文责任编辑: 加入会员收藏夹 点此参与评论>>
复制本网址-发给QQ/微信上的朋友
AI智能听书
选取音色