当前位置 : 主页 > 网页制作 > Nodejs >

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

来源:互联网 收集:自由互联 发布时间:2021-06-16
我尝试在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 , chun
我尝试在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块中关闭它:

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);
};
网友评论