我如何在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.readfs.fstat是asynchronous函数。

刚刚调用fstat ,你正在closures文件( fs.close(fd); )。

这可能是这个错误的原因。