依次使用node.js读取目录内所有文件的内容
我需要遍历给定目录中的文件,并阅读每个文件的内容。 喜欢这个:
fs.readdir(dirPath, (err, dir)=>{ for(var i=0; i<dir.length; i++){ fileName = dir[i]; console.log("A: "+fileName); fs.lstat(dir+"\"+fileName, function(err, stats) { console.log("B: "+fileName); }); } })
以上代码的输出是:
A: B01.txt A: B02.txt A: B03.txt A: B04.txt A: B05.txt B: B05.txt B: B05.txt B: B05.txt B: B05.txt B: B05.txt
虽然我期望输出是这样的:
A: B01.txt B: B01.txt A: B02.txt B: B02.txt ... etc
我如何顺序循环遍历目录中的每个文件并以正确的方式读取它?
编辑
我更新了我的代码,使用statSyn,如下所示,以及添加读取文件的内容代码:
let content = ""; fs.readdir(dirPath, (err, dir)=>{ for(var i=0; i<dir.length; i++){ let fileName = dir[i]; let filePath=dirPath+"/"+fileName; console.log("A: "+fileName); stat = fs.statSync(filePath); if(stat.isFile()){ console.log("B: "+fileName); fs.readFile(filePath, 'utf8', function (err,data) { if (err) { console.log(err); } console.log("C: "+ fileName); mainWindow.webContents.send('getContent' , {msg:data}); }); } } })
现在我得到以下结果,请注意“C”行:
A: B01.txt B: B01.txt A: B02.txt B: B02.txt A: B03.txt B: B03.txt A: B04.txt B: B04.txt A: B05.txt B: B05.txt C: B01.txt C: B05.txt C: B02.txt C: B03.txt C: B04.txt
我设法读取所有文件,但不是为了。 我怎样才能确保我阅读他们?
修正
我结束了使用fs.statSync
和fs.readFileSync
按顺序读取文件。 更不用说使用let
。 感谢@ x-ray和@Skabbi的帮助。
你得到输出
B:B05.txt
一遍又一遍似乎是一个简单的范围界定问题。
尝试使用“let fileName”。
fs.lstat
是一个asynchronous函数。 您可以使用fs.lstatSync
来获取所需的行为。