使用node.js按顺序读取目录内所有文件的内容
Posted
技术标签:
【中文标题】使用node.js按顺序读取目录内所有文件的内容【英文标题】:Read content of all files inside a directory in order using node.js 【发布时间】: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 的帮助。
【问题讨论】:
【参考方案1】:fs.lstat
是一个异步函数。您可以改用fs.lstatSync
来获得所需的行为。
【讨论】:
我可以在 lstatSync 中使用回调函数吗? 不,你可以直接使用它的返回值(var stats = fs.lstat(dir+"\"+fileName);
)。查看文档:nodejs.org/api/fs.html#fs_fs_lstatsync_path
我使用了statSync,但它似乎只给了我第一个文件的内容!【参考方案2】:
你得到了输出
B: B05.txt
一遍又一遍似乎是一个简单的范围界定问题。
尝试使用“let fileName”。
【讨论】:
我试过 let fileName,它似乎让事情变得更好,但我得到的文件名不按顺序(C:B01.txt,C:B05.txt,C:B02.txt,. .), (请检查我上面的更新)。有没有办法读取每个文件 似乎又是一个范围界定问题。确保在声明变量时始终使用“let”或“const”。 如果订单很重要,你可以试试readfilesync 我已经在编辑部分修复了上面的代码。你能检查一下有什么问题吗? 我需要读取文件并从中提取数据,并将数据处理并存储到输出文件中。排序数据在这里很重要。至于环境是桌面应用程序,所以我猜使用同步很好:)。以上是关于使用node.js按顺序读取目录内所有文件的内容的主要内容,如果未能解决你的问题,请参考以下文章