📜  Node.js fs.opendirSync() 方法(1)

📅  最后修改于: 2023-12-03 15:03:12.878000             🧑  作者: Mango

Node.js fs.opendirSync() 方法

Node.js的fs模块提供了许多文件系统相关的API。其中,fs.opendirSync() 方法用于同步打开一个目录并返回一个表示此目录的目录迭代器对象。本文将介绍该方法的用法和相关注意事项。

方法签名
fs.opendirSync(path, options)

参数解释:

  • path:待打开目录的路径,可以是绝对路径或相对路径。
  • options:可选参数,一个表示目录的选项对象。目前只有一个选项可用:encoding,表示以何种编码读取文件名,默认值为utf8

返回值:

  • Dir 对象,表示打开的目录迭代器。
使用方法

使用fs.opendirSync()方法打开目录时,可以先确定待打开目录的路径。若路径无误,该方法会返回一个表示目录的迭代器对象。通过该迭代器对象,可枚举目录下的所有子文件和文件夹信息。

下面示例展示了如何使用fs.opendirSync()方法遍历目录下所有文件和子目录的名称和类型:

const fs = require('fs');

function traverseDir(dirPath) {
  // 打开目录
  const dir = fs.opendirSync(dirPath);
  try {
    let dirent;
    while ((dirent = dir.readSync()) !== null) {
      const filePath = dirPath + '/' + dirent.name;
      const stats = fs.statSync(filePath);
      if (stats.isDirectory()) {
        console.log(`Dir: ${dirent.name}`);
        traverseDir(filePath); // 递归遍历子目录
      } else if (stats.isFile()) {
        console.log(`File: ${dirent.name}`);
      }
    }
  } finally {
    // 释放迭代器
    dir.closeSync();
  }
}

traverseDir('/path/to/directory');

输出结果:

Dir: subdir1
File: file1.txt
File: file2.txt
Dir: subsubdir2
File: file3.txt

在这个示例中,我们首先通过 fs.opendirSync() 方法打开指定目录,并使用 fs.statSync() 方法判断当前文件是文件还是文件夹。如果是文件夹,则递归遍历其子目录下的所有文件和文件夹,如果是文件则输出其文件名。最后,在 try-finally 代码块中释放目录迭代器。

注意事项
  • fs.opendirSync() 方法是同步方法,会阻塞主线程,可能会造成 I/O 阻塞。建议使用异步方法fs.opendir()
  • 目录迭代器对象的 close() 方法必须被调用,以释放系统资源。
  • fs.opendirSync() 方法只能在 Node.js 12.12 版本及以上的版本中使用。
  • fs.opendirSync()方法仅适用于读取目录和其子目录信息,如需读取文件内容请使用fs.readFileSync()方法。