ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
>[success] # 获取文件状态 1. 常用的 api | API | 描述 | | --- | --- | | `fs.stat(path, callback)` | 获取指定路径的文件或目录的详细信息。 | | `fs.statSync(path)` | 同步地获取指定路径的文件或目录的详细信息。 | | `fs.existsSync(path)` | 同步地判断指定路径的文件或目录是否存在。 | | `fs.access(path, mode, callback)` | 测试指定路径的文件或目录是否可访问。 | | `fs.accessSync(path, mode)` | 同步地测试指定路径的文件或目录是否可访问。 | | `fs.fstat(fd, callback)` | 获取一个已经打开的文件的详细信息。 | | `fs.lstat(path, callback)` | 获取指定路径的文件或目录的详细信息,包括符号链接本身的信息。 | | `fs.fstatSync(fd, [, options])` | 同步获取一个已经打开的文件的详细信息。 | | `fs.lstatSync(path, [, options])` | 同步获取指定路径的文件或目录的详细信息,包括符号链接本身的信息。 | 2. 想获取文件文件属性信息例如`是否是一个普通文件`,`是否是文件是一个目录`等,就可以通过其 **返回值(fs.Stats 类)** 进行判断 | 属性 | 类型 | 描述 | | --- | --- | --- | | `stats.isFile()` | `function` | 如果文件是一个普通文件,则返回`true`,否则返回`false`。 | | `stats.isDirectory()` | `function` | 如果文件是一个目录,则返回`true`,否则返回`false`。 | | `stats.isBlockDevice()` | `function` | 如果文件是一个块设备,则返回`true`,否则返回`false`。 | | `stats.isCharacterDevice()` | `function` | 如果文件是一个字符设备,则返回`true`,否则返回`false`。 | | `stats.isSymbolicLink()` | `function` | 如果文件是一个符号链接,则返回`true`,否则返回`false`。 | | `stats.isFIFO()` | `function` | 如果文件是一个 FIFO,则返回`true`,否则返回`false`。 | | `stats.isSocket()` | `function` | 如果文件是一个 Socket,则返回`true`,否则返回`false`。 | | `stats.dev` | `number` | 文件所在设备的 ID。 | | `stats.ino` | `number` | 文件的 inode 编号。 | | `stats.mode` | `number` | 文件的权限模式。 | | `stats.nlink` | `number` | 文件的硬链接数。 | | `stats.uid` | `number` | 文件所有者的用户 ID。 | | `stats.gid` | `number` | 文件所有者的组 ID。 | | `stats.rdev` | `number` | 如果文件是一个特殊文件,则为其设备 ID。 | | `stats.size` | `number` | 文件大小(以字节为单位)。 | | `stats.blksize` | `number` | 文件系统块的大小。 | | `stats.blocks` | `number` | 已分配给文件的块数。 | | `stats.atimeMs` | `number` | 文件的最后访问时间(以毫秒为单位)。 | | `stats.mtimeMs` | `number` | 文件的最后修改时间(以毫秒为单位)。 | | `stats.ctimeMs` | `number` | 文件的最后更改时间(以毫秒为单位)。 | | `stats.birthtimeMs` | `number` | 文件的创建时间(以毫秒为单位)。 | | `stats.atime` | `Date` | 文件的最后访问时间(以`Date`对象形式)。 | | `stats.mtime` | `Date` | 文件的最后修改时间(以`Date`对象形式)。 | | `stats.ctime` | `Date` | 文件的最后更改时间(以`Date`对象形式)。 | | `stats.birthtime` | `Date` | 文件的创建时间(以`Date`对象形式)。 | >[danger] ### fs.stat(path\[, options\], callback) `s.stat()`是Node.js文件系统模块中的一个方法,用于获取指定路径的文件或目录的详细信息,例如文件大小、修改时间、创建时间等。 函数签名如下: ~~~ fs.stat(path[, options], callback) ~~~ 参数说明如下: * `path`:需要获取信息的文件或目录的路径。 * `options`:一个可选的对象,用于指定一些选项,例如`bigint`选项,用于返回大整数值而非默认的数字类型。 * `callback`:一个回调函数,用于处理`fs.stat()`方法返回的结果。该回调函数接收两个参数,第一个参数为错误对象,如果没有错误则为`null`,第二个参数为表示文件或目录信息的`fs.Stats`对象。 2. `fs.stat()`方法可以用于判断文件或目录是否存在,如果指定的文件或目录不存在,则会返回一个`ENOENT`错误,可以通过判断错误码来判断文件或目录是否存在。如果存在,则会返回`fs.Stats`对象,可以通过该对象的属性来获取文件或目录的详细信息。 ~~~ const fs = require('fs'); fs.stat('/path/to/file', (err, stats) => { if (err) { if (err.code === 'ENOENT') { console.log('File not found'); } else { console.error(err); } } else { console.log(stats); } }); ~~~ >[danger] ##### 案例 ~~~ const fs = require('fs') // 获取文件类型 fs.stat('./test.js', (err, stats) => { if (err) { console.log(err) } else { console.log(stats.isFile()) // true console.log(stats.isDirectory()) // false console.log(stats) // false } }) ~~~ * 打印结果 ~~~ Stats { dev: 1320529684, mode: 33206, nlink: 1, uid: 0, gid: 0, rdev: 0, blksize: 4096, ino: 281474977770454, size: 258, blocks: 8, atimeMs: 1681265118474.2537, mtimeMs: 1681265113121.3955, ctimeMs: 1681265113121.3955, birthtimeMs: 1679989091154.562, atime: 2023-04-12T02:05:18.474Z, mtime: 2023-04-12T02:05:13.121Z, ctime: 2023-04-12T02:05:13.121Z, birthtime: 2023-03-28T07:38:11.155Z } ~~~ >[danger] ### fs.statSync(path\[, options\]) 1. 在使用`fs.statSync()`方法时,需要传入文件或目录的路径作为第一个参数`path`。如果需要指定可选项,则可以传入一个包含`bigint`和`throwIfNoEntry`字段的可选项对象作为第二个参数`options`。`options.bigint`字段用于指定返回的`fs.Stats`对象中的数值是否应为`bigint`,默认值为`false`,即返回普通数字。`options.throwIfNoEntry`字段用于指定如果文件系统条目不存在,方法是否会抛出异常,而不是返回`undefined`,默认值为`true`。 | 参数名 | 类型 | 描述 | 默认值 | | --- | --- | --- | --- | | `path` | string | Buffer | URL | 文件或目录的路径。 | 无 | | `options` | Object | 可选项对象,包含以下字段: | `{ bigint: false, throwIfNoEntry: true }` | | `options.bigint` | boolean | 返回的`fs.Stats`对象中的数值是否应为`bigint`。 | `false` | | `options.throwIfNoEntry` | boolean | 如果文件系统条目不存在,是否会抛出异常,而不是返回`undefined`。 | `true` | >[danger] ##### 案例 ~~~ const fs = require('fs'); try { const stats = fs.statSync('/path/to/file'); console.log(stats.isFile()) // true console.log(stats.isDirectory()) // false console.log(stats); } catch (err) { console.error(err); } ~~~ >[danger] ### fs.existsSync(path) 路径的文件或目录是否存在 1. `fs.existsSync(path)`是 Node.js 中的一个同步方法,用于检查指定的文件或目录是否存在。它接受一个文件或目录的路径作为参数,如果该路径表示的文件或目录存在,则返回 true,否则返回 false。 2. 这是一个同步方法,会阻塞代码的执行,因此在进行文件或目录检查的时候,建议使用异步方法,如`fs.stat()` >[danger] ##### 案例 ~~~javascript const fs = require('fs'); // 检查文件是否存在 const fileExists = fs.existsSync('/path/to/file.txt'); console.log(fileExists); // true 或 false // 检查目录是否存在 const dirExists = fs.existsSync('/path/to/dir'); console.log(dirExists); // true 或 false ~~~ >[danger] ### fs.fstat(fd[, options], callback) 1. `fs.fstat(fd[, options], callback)`是 Node.js 中用于获取文件描述符所指向的文件的元数据的方法。它是一个异步方法,可以用于获取文件的大小、创建时间、修改时间等信息。 >[danger] ##### api 介绍 `fs.fstat()`方法接受三个参数: * `fd`:文件描述符,由`fs.open()`或`fs.openSync()`方法返回。 * `options`:一个可选的对象,用于指定一些选项。目前支持的选项包括`bigint`,如果设置为`true`,则返回的文件大小将以`BigInt`类型表示,否则将以普通的`Number`类型表示。默认值为`false`。 * `callback`:一个回调函数,用于处理获取到的元数据。回调函数接受两个参数,第一个参数是可能发生的错误,第二个参数是包含文件元数据的`fs.Stats`对象。 >[danger] ##### 案例 ~~~ const fs = require('fs'); // 打开文件并获取文件描述符 fs.open('/path/to/file.txt', 'r', (err, fd) => { if (err) throw err; // 获取文件元数据 fs.fstat(fd, (err, stats) => { if (err) throw err; // 打印文件大小和修改时间 console.log(`文件大小:${stats.size} 字节`); console.log(`修改时间:${stats.mtime}`); // 关闭文件描述符 fs.close(fd, (err) => { if (err) throw err; }); }); }); ~~~