2015-06-03 34 views
2

您好,我正在使用nodejs和scoket io将一些数据推送到目标。我从json文件中读取json数据以将其推送到目标。nodejs在使用fstat读取文件时抛出偏移出界限错误

我正在使用fs模块的fstat来读取一个文件,但是每当有一个并发校正或者一段时间后,它会抛出偏移超出限制的错误。

这里是代码片段。

fs.stat(fileName, function(error, stats) { 
     fs.open(fileName, "r", function(error, fd2) { 
     var buffer = new Buffer(stats.size); 

      fs.read(fd2, buffer, 0, buffer.length, null, function(error, bytesRead, buffer) { 
      var data = buffer.toString("utf8", 0, buffer.length); 

      fs.close(fd2); 
    }) 
    }) 

这是它抛出

fs.js:457 
    binding.read(fd, buffer, offset, length, position, wrapper); 
    ^
    Error: Offset is out of bounds 
     at Object.fs.read (fs.js:457:11) 
     at /var/custom_nodejs_projects/js/server.js:84:14 
     at Object.oncomplete (fs.js:107:15) 

有人能指导我在这里可能是什么问题,因为从过去两天与此挣扎的错误。

+0

是否有不使用可读流的具体原因是什么? –

+0

同时写入和读取相同的文件必然会在某些时候导致错误,而没有某种形式的锁定。 – robertklep

+0

@rodrigo使用json文件读取的原因是它正在被其他应用程序更新,并且正在从nodejs读取,以使用socket.io将其推送到目标。如果您提供了一些关于如何在此上下文中使用可读流的信息,那么这将非常有帮助 –

回答

1

如果文件存在但为空(0字节),则调用fs.read()将失败,并显示错误。

所以阅读之前,请确保stats.size不为0

+0

我会试试这个,并让你知道 –

+0

我试过你说的,但现在我gettng EMOFILE错误。我尝试使用可读的流,但也得到相同的错误。我有链接中的代码http://pastebin.com/06H0peHh你可以请帮我在这是什么做错 –

+0

@SrinivasHN'EMFILE'(我假设)是一个错误,你会得到当你有太多的文件打开。这取决于您运行文件读取代码的环境。首先,你应该_always_关闭你的文件描述符。我建议你使用'fs.readFile()'而不是'fs.open()/ fs.read()'。 – robertklep

相关问题