gpt4 book ai didi

node.js - 我如何在 Node js 中使用 fs.read()

转载 作者:搜寻专家 更新时间:2023-10-31 22:48:19 25 4
gpt4 key购买 nike

我尝试在 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);
};

实际上,我在 stackoverflow 中使用了一些示例。

当我执行源代码时,

err : Error: EBADF, read

返回此错误。

但是,如果我使用 readFile 方法,效果很好。

    fs.readFile('helloworld.txt', function (err, data) {
if (err) throw err;
console.log(data.toString('utf8'));
});

结果是

Hello World!

当然是同一个文件。

请让我知道问题是什么。

谢谢。

最佳答案

区别不在于您使用的功能,而在于您使用它们的方式。

您使用的所有这些 fs.* 函数都是异步的,这意味着它们并行运行。所以,当你运行 fs.close 时,其他人还没有完成。

您应该在 fs.stat block 内关闭它:

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);
};

关于node.js - 我如何在 Node js 中使用 fs.read(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25229383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com