我有一个大约1GB的大型txt文件。我正在尝试从此文件中读取内容并写入另一个文件。我的代码是 - >
var fs = require("fs");
var fb = fs.openSync('./copy.txt','r+');
fs.open('./largefile.txt','r',function(error,fd){
fs.fstat(fd,function(error,stats){
var totalFileSize = stats.size,
chunk = 512,
buffer = new Buffer(512),
bytesRead = 0;
while(bytesRead < totalFileSize){
if((totalFileSize - bytesRead) < chunk){
chunk = totalFileSize - bytesRead ;
}
fs.read(fd,buffer,0,chunk,bytesRead,function(err, bytesRead, buffer){
fs.write(fb,buffer,0,chunk,bytesRead,function(err,written,buffer){});
});
bytesRead = bytesRead + chunk;
}
});
});
我有这个错误控制台 - &gt;
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
Q1)我可能做错了什么? Q2)在child_process中执行此操作有什么好处?如果是,我应该使用fork()还是spawn()以及如何使用?(我是node.js的新手,发现child_process非常混乱。)
答案 0 :(得分:0)
您使用的所有fs
函数都是异步的,因此您有效地尝试同时打开copy.txt
数千次。
看起来你也永远不会更新bytesRead
所以你的while循环将永远运行。