这就是我在完美世界中会做的事情:

fs.open('somepath', 'r+', function(err, fd) { 
    fs.write(fd, 'somedata', function(err, written, string) { 
       fs.rewind(fd, 0) //this doesn't exist 
    }) 
}) 

这是我当前的实现:

return async.waterfall([ 
    function(next) { 
      //opening a file descriptor to write some data 
      return fs.open('somepath', 'w+', next) 
    },  
    function(fd, next) { 
      //writing the data 
      return fs.write(fd, 'somedata', function(err, written, string) { 
        return next(null, fd) 
      }) 
    }, 
    function(fd, next) { 
      //closing the file descriptor 
      return fs.close(fd, next) 
    }, 
    function(next) { 
      //open again to reset cursor position 
      return fs.open('somepath', 'r', next) 
    } 
], function(err, fd) {  
   //fd cursor is now at beginning of the file  
}) 

我尝试在不关闭 fd 的情况下重置位置:

fs.read(fd, new Buffer(0), 0, 0, 0, fn) 

但这会抛出 错误:偏移量超出范围

有没有一种方法可以在不执行这种可怕的hack的情况下重置光标?

/e: The offset is out of bounds 错误来自this exception .通过将缓冲区大小设置为 1 可以轻松修复,但它不会倒回光标。可能是因为我们要求函数不读取任何内容。

请您参考如下方法:

今天的答案是不在核心里,纯javascript加不进去。

有一个扩展 node-fs-ext添加了一个 seek 函数来移动 fd 光标。这是在 C++ 中完成的 here .

相关Stackoverflow question .


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!