我如何在Node js中使用fs.read()
我尝试在Mac OS中使用Nodejs fs.read方法。 然而,它不工作..我使用下面的源代码
var fs = require('fs'); fs.open('helloworld.txt', 'r', function(err, fd) { fs.fstat(fd, function(err, stats) { var bufferSize=stats.size , chunkSize=512, buffer=new Buffer(bufferSize), bytesRead = 0; while (bytesRead < bufferSize) { if ((bytesRead + chunkSize) > bufferSize) { chunkSize = (bufferSize - bytesRead); } fs.read(fd, buffer, bytesRead, chunkSize, bytesRead, testCallback); bytesRead += chunkSize; } console.log(buffer.toString('utf8')); }); fs.close(fd); }); var testCallback = function(err, bytesRead, buffer){ console.log('err : ' + err); };
其实,我使用了一些在计算器中的例子。
当我执行源代码时,
err : Error: EBADF, read
这个错误被返回。
但是,如果我使用readFile方法,它运作良好。
fs.readFile('helloworld.txt', function (err, data) { if (err) throw err; console.log(data.toString('utf8')); });
结果是
Hello World!
当然,这是相同的文件。
请让我知道问题是什么。
谢谢。
不同之处不在于你正在使用的function,而在于你使用它们的方式。
所有你使用的fs。*函数都是asynchronous的,这意味着它们并行运行。 所以,当你运行fs.close时,其他的还没有完成。
你应该closures它在fs.stat块内:
var fs = require('fs'); fs.open('helloworld.txt', 'r', function(err, fd) { fs.fstat(fd, function(err, stats) { var bufferSize=stats.size , chunkSize=512, buffer=new Buffer(bufferSize), bytesRead = 0; while (bytesRead < bufferSize) { if ((bytesRead + chunkSize) > bufferSize) { chunkSize = (bufferSize - bytesRead); } fs.read(fd, buffer, bytesRead, chunkSize, bytesRead, testCallback); bytesRead += chunkSize; } console.log(buffer.toString('utf8')); fs.close(fd); }); }); var testCallback = function(err, bytesRead, buffer){ console.log('err : ' + err); };
fs.read
和fs.fstat
是asynchronous函数。
刚刚调用fstat
,你正在closures文件( fs.close(fd);
)。
这可能是这个错误的原因。