我尝试fs.read在Mac OS中使用Nodejs www.example.com方法。但是它不工作。我使用下面的源代码
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);
};
实际上,我用了一些stackoverflow的例子。
当我执行源代码时,
err : Error: EBADF, read
则返回该ERR。
但是如果我使用readFile方法,它工作得很好。
fs.readFile('helloworld.txt', function (err, data) {
if (err) throw err;
console.log(data.toString('utf8'));
});
结果是
Hello World!
当然,是同一个文件。
拜托,告诉我是什么问题。
谢谢你。
3条答案
按热度按时间eqzww0vc1#
不同之处不在于你使用的函数,而在于你使用它们的方式。
你使用的所有fs.* 函数都是异步的,也就是说它们是并行运行的,所以当你运行fs.close的时候,其他的函数还没有完成。
您应该在fs.stat块中关闭它:
5t7ly7z52#
fs.read
和fs.fstat
是异步函数。在调用
fstat
之后,您将关闭文件(fs.close(fd);
)。这可能是此错误的原因。
ruoxqz4g3#
代码中的错误是您当前正在应用程序中使用异步函数。这意味着在执行第一个操作之前,另一个操作并行启动,即
fs.close()
在执行操作之前关闭您的文件。您可以简单地用node.js中相同的fs
模块提供的同步函数替换它们。