爱收集资源网

获取文件信息更简洁

网络 2023-06-29 13:00

获取文件信息

每个文件都有一组细节,我们可以使用Node.js进行复查。特别是使用fs模块提供的stat()方法。

const fs = require('fs');
fs.stat('/Users/joe/test.txt', (err, stats) => {
  if (err) {
 	 	console.error(err);
  }
  	console.error();
// we have access to the file stats in `stats`
});

返回的stats对象

Stats {
  dev: 2114,          // 包含文件的设备的数字标识符。
  ino: 48064969,      // 文件的特定于文件系统的“Inode”编号。
  mode: 33188,        // 描述文件类型和模式的位字段。
  nlink: 1,           // 该文件存在的硬链接数。
  uid: 85,            // 拥有文件(POSIX)的用户的数字用户标识符。
  gid: 100,           // 拥有文件(POSIX)的组的数字组标识符。
  rdev: 0,            // 如果文件表示设备,则为数字设备标识符。
  size: 527,          // 文件的大小(以字节为单位)。
  blksize: 4096,      // 用于i/o操作的文件系统块大小。
  blocks: 8,          // 为此文件分配的块数。
  atimeMs: 1318289051000.1, // 最后一次访问此文件的时间戳(以毫秒为单位)。
  mtimeMs: 1318289051000.1,
  ctimeMs: 1318289051000.1,
  birthtimeMs: 1318289051000.1,
  atime: Mon, 10 Oct 2011 23:24:11 GMT,   // 指示上次访问此文件的时间戳。
  mtime: Mon, 10 Oct 2011 23:24:11 GMT,
  ctime: Mon, 10 Oct 2011 23:24:11 GMT,
  birthtime: Mon, 10 Oct 2011 23:24:11 GMT 
}

Node.js还提供了一个sync方式,它会阻塞线程,直到文件统计数据打算好:

const fs = require('fs');
try {
	const stats = fs.statSync('/Users/joe/test.txt');
} catch (err) {
	console.error(err);
}

文件信息包含在stats变量中。我们可以使用统计数据提取什么样的信息?

const fs = require('fs');
fs.stat('/Users/joe/test.txt', (err, stats) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(stats.isFile());          // true
  console.log(stats.isDirectory());     // false
  console.log(stats.isSymbolicLink());  // false
  console.log( stats.size)              // 1024000 //= 1MB
});

如果您乐意,也可以使用fs/promises 模块提供的基于promise的fsPromises.stat()方法:

const fs = require('fs/promises');
async function example() {
  try {
    const stats = await fs.stat('/Users/joe/test.txt');
    stats.isFile(); // true
    stats.isDirectory(); // false
    stats.isSymbolicLink(); // false
    stats.size; // 1024000 //= 1MB
  } catch (err) {
  	console.log(err);
  }
}
example();

什么是文件时间戳_js获取路径中的文件名_nodejs获取当前路径

文件路径

系统中的每位文件都有一个路径。在Linux和macOS上,路径可能看起来像:/users/joe/file.txt,而Windows计算机不同,并且具有如下结构:C:\users\joe \file.txt

在应用程序中使用路径时须要注意,因为必须考虑到这一差别。

您可以使用const-path=require('path')将此模块包含在文件中;你可以开始使用它的技巧。

从路径中获取信息:

给定一条路径,您可以使用以下方式从中提取信息:

const notes = '/users/joe/notes.txt';
path.dirname(notes); // /users/joe
path.basename(notes); // notes.txt
path.extname(notes); // .txt

通过为basename指定第二个参数,可以获得不带扩展名的文件名:

path.basename(notes, path.extname(notes)); // notes

使用路径:

您可以使用path.join()连接路径的两个或多个部份:

const name = 'joe';
path.join('/', 'users', name, 'notes.txt'); // '/users/joe/notes.txt'

您可以使用path.resolve()获得相对路径的绝对路径估算:

path.resolve('joe.txt'); // '/Users/joe/joe.txt' if run from my home folder

Node.js将/joe.txt附加到当前工作目录中。如果指定第二个参数文件夹,resolve将使用第一个作为第二个的基础:

path.resolve('tmp', 'joe.txt'); // '/Users/joe/tmp/joe.txt' if run from my home folder

如果第一个参数以斜线开头,则意味着它是一个绝对路径:

path.resolve('/etc', 'joe.txt'); // '/etc/joe.txt'

path.normalize()是另一个有用的函数,当它包含这样的相对修饰符时,它将尝试估算实际路径。或者 .. 或者 //:

../ 实际上就是返回上级目录

path.normalize('/users/joe/..//test.txt'); // '/users/test.txt'

什么是文件时间戳
上一篇:打印机安装和彩色打印指南 下一篇:没有了
相关文章