每天撸个API -- File System (2)

stat : 显示文件或文件系统状态(path)

fs.stat(path, callback)

//Asynchronous stat
fs.stat('/path/demo1.txt', function (err, stats) {
  if (err) {
    throw err;
  }
  console.log(stats);
});

回调中有两个参数 (err, stats)stats是一个fs.stats对象。

fs.statSync(path)

//Synchronous stat 
var stats = fs.statSync('/home/yofine/example/demo1.txt');
console.log(stats);

log :

{ dev: 64770,
  mode: 33206,
  nlink: 1,
  uid: 1000,
  gid: 1000,
  rdev: 0,
  blksize: 4096,
  ino: 12845544,
  size: 5,
  blocks: 8,
  atime: Tue Dec 24 2013 00:46:47 GMT+0800 (CST),
  mtime: Tue Dec 24 2013 00:07:43 GMT+0800 (CST),
  ctime: Thu Dec 26 2013 13:04:53 GMT+0800 (CST) }

fstat : 显示文件或文件系统状态(fd)

fs.fstat(fd, callback)

//Asynchronous stat
fs.open('/path/demo1.txt', 'a', function (err, fd) {
  if (err) {
    throw err;
  }
  fs.fstat(fd, function (err, stats) {
    if (err) {
      throw err;
    }
    console.log(stats);
    fs.close(fd, function () {
      console.log('Done');
    });
  });
});

fs.fstatSync(fd)

//Synchronous stat
var fd = fs.openSync('/path/demo1.txt', 'a');
var stats = fs.fstatSync(fd);
console.log(stats);
fs.closeSync(fd);
console.log('Done');

lstat : 显示文件或文件系统状态(符号链接)

fs.lstat(path, callback)

//Asynchronous lstat
fs.lstat('/path/demo1.txt', function (err, stats) {
  if (err) {
    throw err;
  }
  console.log(stats);
});

fs.lstatSync(path)

//Synchronous lstat
var stats = fs.lstatSync('/path/demo1.txt');
console.log(stats);

fs.lstat 和 fs.stat 的区别 :

path 为实际路径时,两者查看的文件或文件系统状态是一样的,但是当 path 为符号链接路径时,fs.stat 查看的是符号链接所指向实际路径的文件或文件系统状态,而 fs.lstat 查看的是符号链接路径的文件或文件系统状态 。

link : 硬链接

fs.link(srcpath, dstpath, callback)

//Asynchronous link
fs.link('/path/demo1.txt', '/path/demo1_h', function (err) {
  if (err) {
    throw err;
  }
  console.log('hardlink complete');
});

fs.linkSync(srcpath, dstpath)

//Synchronous link
fs.linkSync('/path/demo1.txt', '/path/demo1_h');

硬链接 :

由于linux下的文件是通过索引节点(Inode)来识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针,系统并不为它重新分配inode。每添加一个一个硬链接,文件的链接数就加1。硬链接相当于备份。

symlink : 符号链接

fs.symlink(srcpath, dstpath, [type], callback)

//Asynchronous symlink
fs.symlink('/path/demo1.txt', '/path/demo1_s', function (err) {
  if (err) {
    throw err;
  }
  console.log('symlink complete');
});

fs.symlinkSync(srcpath, dstpath, [type])

//Synchronous symlink
fs.symlinkSync('/path/demo1.txt', '/path/demo1_s');

符号链接 :

符号链接一类特殊的文件,相当于一个快捷方式,与硬链接不同,它是新建的一个文件,而且当 ls -al 时会标明是链接。

readlink : 读取链接源地址

fs.readlink(path, callback)

//Asynchronous readlink
fs.readlink('/path/demo1_s', function (err, linkString) {
  if (err) {
    throw err;
  }
  console.log(linkString);
});

fs.readlinkSync(path)

//Synchronous readlink
var linkString = fs.readlinkSync('/path/demo1_s');
console.log(linkString);

以上两个的参数 path 要为 符号链接

    原文作者:Yofine
    原文地址: https://segmentfault.com/a/1190000000370264
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞