我试图从目录中递归读取文件并尝试以下代码。

readDirFiles.list('/dir/subDir/', 'utf8', function (err, filenames) {
      if (err) return console.dir(err);
      //filenames haslist of all files and dirs in '/dir/subDir/'

      if(filenames){
        filenames.forEach(function(filename) {
          //filename is full path of file and array also contains sub directory paths

          try {
            console.log('Opening file '+  filename);
            fileContents = fs.readFileSync(filename, 'utf8');
            console.log(md5(fileContents));
          } catch (err) {
            console.log(err);
          }

        }, this);
      }
    });


filenames中,我有所有文件和目录的列表,我只想从中读取文件并跳过目录。当我尝试使用fs.readFileSync(filename, 'utf8')读取文件时,它给了我两个错误
1. { [Error: EISDIR: illegal operation on a directory, read] errno: -21, code: 'EISDIR', syscall: 'read' }这是可以的,因为它试图读取目录而不是文件。
2. [ReferenceError: fileContents is not defined]当我传递正确的文件路径和正确的扩展名时,不知道为什么会出现此错误。

最佳答案

您的脚本的顶部可能带有'use strict',并且由于未正确声明fileContents,因此出现了参考错误。

要解决此问题,请使用适当的变量声明:

let fileContents = fs.readFileSync(filename, 'utf8');

07-24 17:45