【发布时间】:2017-08-02 18:09:39
【问题描述】:
我需要遍历给定目录中的文件,并读取每个文件的内容。像这样:
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 的帮助。
【问题讨论】: