使用 node.js 按顺序读取目录中所有文件的内容
Read content of all files inside a directory in order using 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 的帮助。
fs.lstat
是一个异步函数。您可以使用 fs.lstatSync
来获得所需的行为。
你得到了输出
乙:B05.txt
一遍又一遍似乎是一个简单的范围界定问题。
尝试使用 "let fileName"。
我需要遍历给定目录中的文件,并读取每个文件的内容。像这样:
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 的帮助。
fs.lstat
是一个异步函数。您可以使用 fs.lstatSync
来获得所需的行为。
你得到了输出
乙:B05.txt
一遍又一遍似乎是一个简单的范围界定问题。
尝试使用 "let fileName"。