如何fs.read在Node js中使用www.example.com()

mbskvtky  于 2023-01-30  发布在  Node.js
关注(0)|答案(3)|浏览(128)

我尝试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!

当然,是同一个文件。
拜托,告诉我是什么问题。
谢谢你。

eqzww0vc

eqzww0vc1#

不同之处不在于你使用的函数,而在于你使用它们的方式。
你使用的所有fs.* 函数都是异步的,也就是说它们是并行运行的,所以当你运行fs.close的时候,其他的函数还没有完成。
您应该在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);
};
5t7ly7z5

5t7ly7z52#

fs.readfs.fstat是异步函数。
在调用fstat之后,您将关闭文件(fs.close(fd);)。
这可能是此错误的原因。

ruoxqz4g

ruoxqz4g3#

代码中的错误是您当前正在应用程序中使用异步函数。这意味着在执行第一个操作之前,另一个操作并行启动,即fs.close()在执行操作之前关闭您的文件。您可以简单地用node.js中相同的fs模块提供的同步函数替换它们。

相关问题