我如何在Node JS中使用fs.read()

Kan*_*Suh 5 filestream fs node.js

我尝试在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);
    };
Run Code Online (Sandbox Code Playgroud)

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

当我执行源代码时,

err : Error: EBADF, read
Run Code Online (Sandbox Code Playgroud)

此错误返回。

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

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

结果是

Hello World!
Run Code Online (Sandbox Code Playgroud)

当然,它是同一文件。

请让我知道问题出在哪里。

谢谢。

Oxi*_*Oxi 0

fs.readfs.fstat是异步函数。

调用 后,fstat您将关闭文件 ( fs.close(fd);)。

这可能是此错误的原因。