在文件编写器流中更改目标文件

时间:2015-06-16 14:57:26

标签: javascript node.js file stream fs

我不想连续登录文件,但每1000行之后我想更改为新文件。现在我的方法是这样的:

var fs = require('fs');
...
var outputStream = fs.createWriteStream(fileName + '.csv');
outputStream.write(content, 'utf8', callback);
...
if (lineCounter === 1000) {
  outputStream.end(function(err) {
    outputStream = fs.createWriteStream(fileName2 + '.csv');
    outputStream.write(content, 'utf8', callback);
  });
}

最后文件不包含最后几行。我愿意接受任何解决方案,我只需要将流写入几个文件。

提前致谢!

1 个答案:

答案 0 :(得分:0)

起初我尝试使用Highland.js的流,但由于某种原因我无法暂停它们。我发布的脚本已经过测试,它正在运行。我最后分享了原始资料。所以,我实际上还没有开始阅读第二个文件,但我相信现在很容易,因为在脚本达到定义的行限制之后你有必要继续前进。

var stream = require('stream'),
        fs = require('fs'),
        readStream = fs.createReadStream('./stream.txt', {highWaterMark: 15}),
        limitStream = new stream.Transform(),
        limit = 0
    limitStream._transform = function(chunk, encoding, cb) {
        if (++limit <= 5) {
            console.log('before', limit)
            return cb(null, chunk + '\n')
        }
        console.log('after',limit)
        this.end()
        cb()
    }
    limitStream.on('unpipe', function() { console.log('unpipe emitted from limitStream') })
    limitStream.on('end', function() { console.log('end emitted from limitStream') })
    readStream.pipe(limitStream).pipe(process.stdout)

来源:https://groups.google.com/forum/#!topic/nodejs/eGukJUQrOBY

在发布答案后,我找到了可以工作的库,但我承认我还没有测试过它。我只是将其作为参考点分享:https://github.com/isaacs/truncating-stream