使用node.js按顺序读取目录中所有文件的内容

时间:2017-03-12 18:43:38

标签: node.js electron fs

我需要遍历给定目录中的文件,并读取每个文件的内容。像这样:

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});
            });
        }
    }
})

现在我得到以下结果,请注意&#34; C&#34;行:

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.statSyncfs.readFileSync按顺序读取文件。更不用说使用let了。感谢@ x-ray和@Skabbi的帮助。

2 个答案:

答案 0 :(得分:1)

var name=$(select).attr('name'); var matches = name.match(/\[(.*?)\]/); var number=matches[1]; 是一个异步函数。您可以使用fs.lstat来获得所需的行为。

答案 1 :(得分:0)

获得输出

B:B05.txt

一遍又一遍似乎是一个简单的范围问题。

尝试使用&#34;让fileName&#34;。