在Node.js中找不到子目录中的文件

时间:2018-08-06 17:15:57

标签: javascript node.js fs readdir

我需要某种方式遍历子目录,但是它返回一个错误:ENOENT: no such file or directory, stat 'text3.txt' 这是我使用的文件:

main.js
files
|_file1.txt
|_file2.txt
dir
|_text3.txt

这是我的main.js:

fs = require('fs'), aes = require('aes256'),
key = 'abc';
  enc = file => {
   return aes.encrypt(key,file)
  }
  decr = encr => {
    return aes.decrypt(key,encr)
  }
    clf = dir => {
    files = fs.readdirSync(dir);
      // Filter files
      for(let i of files){
        stat = fs.statSync(i)
          if(stat.isFile()){
            newFiles.push(i)
          }
          else dirs.push(i)
        }
        // Encrypt folders
          for(let file of newFiles){
            fl = fs.readFileSync(file).toString();
            fs.writeFileSync(file,enc(fl));
          }
    }
    clf('./')
    for(let c of dirs) clf(c);

解密和加密函数使用aes256加密并返回字符串。然后clf函数检查文件是否不是文件夹,并将文件夹推入数组。然后我们加密主目录中的文件,但是子目录中什么也没有发生,而是返回错误:

ENOENT: no such file or directory, stat 'text3.txt'

但是text3.txt在目录中!那为什么我有一个错误呢?

1 个答案:

答案 0 :(得分:1)

首先,声明您使用的每个变量。这是使用未声明变量的灾难的秘诀。在不首先使用letconst将每个变量声明为适当的作用域之前,我什至不会尝试使用这样的代码。

第二,当您执行fs.statSync(i)时,此处的i只是一个没有路径的普通文件名。如果您执行console.log(i),将会看到它只是一个文件名。因此,要引用正确的文件,必须将readdirSync(dir)上的路径添加回它,然后将该完整路径传递到fs.statSync()

您会发现path.join()是将路径与文件名结合起来的便捷方法。