两个类

fs.Dir 是可迭代的目录流的类,fs.Dirent 是遍历 fs.Dir 获得的目录项,可以是文件或目录中的子目录

fs.Dir

  • dir.path:目录的只读路径
  • dir.read():不传入 callabck 函数则返回 Promise,读取迭代器下一个目录项,返回一个 Promise,resolve 后得到 fs.Dirent 或 null(如果没有更多的目录项要读取)
  • dir.close():不传入 callabck 函数则返回 Promise,关闭目录的底层资源句柄

    fs.Dirent

  • dirent.name

  • dirent.isDirectory()
  • dirent.isFile()
  • dirent.isSymbolicLink()

fs.opendir

fs.opendir(path[, options], callback) 打开一个目录,返回 fs.Dir 对象

  1. const fs = require('fs/promises');
  2. async function print(path) {
  3. const dir = await fs.opendir(path);
  4. for await (const dirent of dir) {
  5. if (!dirent.isFile(dirent)) console.log(dirent.name);
  6. }
  7. }
  8. print('./').catch(console.error);

可以通过 dir.read() 迭代 dir

  1. const fs = require('fs/promises');
  2. async function print(path) {
  3. const dir = await fs.opendir(path);
  4. let dirent = await dir.read();
  5. while (dirent) {
  6. if (!dirent.isFile(dirent)) console.log(dirent.name);
  7. dirent = await dir.read();
  8. }
  9. dir.close();
  10. }
  11. print('./').catch(console.error);

fs.readdir

fs.readdir(path[, options], callback) 读取目录的内容

  • path
  • options
    • encoding:默认值 utf8,如果 encoding 设置为 ‘buffer’,则返回的文件名是 Buffer 对象
    • withFileTypes:默认值 false,设置为 true 后回调函数 files 数组将包含 fs.Dirent 对象
  • callback,有两个参数
    • err
    • files:目录中的文件名的数组 ```javascript const fs = require(‘fs/promises’);

async function print(path) { const files = await fs.readdir(path); for (const file of files) { console.log(file); } } print(‘./‘).catch(console.error);

  1. <a name="SrjJc"></a>
  2. # fs.mkdir
  3. `fs.mkdir(path[, options], callback)` 创建目录<br />options
  4. - recursive:默认值 false,设置为 true 时候相当命令 `mkdir -p` 会把不存在的目录创建
  5. - mode:默认值 0o777,Windows 不支持
  6. ```javascript
  7. const fs = require('fs')
  8. const path = require('path')
  9. // 创建 /tmp/a/apple 目录,无论是否存在 /tmp 和 /tmp/a 目录。
  10. const pathName = path.join(__dirname, 'tmp/a/apple')
  11. fs.mkdir(
  12. pathName,
  13. { recursive: true },
  14. err => {
  15. if (err) throw err;
  16. }
  17. );

fs.rmdir

fs.rmdir(path[, options], callback) fs.rmdir 用于删除文件夹
options

  • recursive:默认值 false,如果为 true,则执行递归的目录删除。在递归模式中,如果 path 不存在则不报告错误,并且在失败时重试操作
  • retryDelay:默认值 100,出现异常后重试之间等待毫秒数。如果 recursive 选项不为 true,则忽略此选项
  • maxRetries:默认值为 0,表示出现异常后重试的次数,如果遇到 EBUSY、 EMFILE、 ENFILE、 ENOTEMPTY 或 EPERM 错误,则 Node.js 将会在每次尝试时以 retryDelay 毫秒的线性回退来重试该操作。 如果 recursive 为 false,则忽略此选项
    1. const fs = require('fs')
    2. const path = require('path')
    3. const pathName = path.join(__dirname, 'tmp')
    4. fs.rmdir(
    5. pathName,
    6. { recursive: true },
    7. err => {
    8. if (err) throw err;
    9. }
    10. );