我想读取。txt文件,将数据附加到末尾,最后将其发送到zipstream。现在我正在做的是写一个新文件,然后使用zipstream的新文件,但我想在飞行中这样做,而不创建一个不必要的新文件。
我的问题是如何创建一个读流,修改它并发送到另一个读流(可能在中间有一个写流)。
这可能吗?
最初的想法是这个,但是我在中间的某个地方迷路了:
var zipstream = require('zipstream');
var Stream = require('stream');
var zipOut = fs.createWriteStream('file.zip');
var zip = zipstream.createZip({ level : 1 });
zip.pipe(zipOut);
var rs = fs.createReadStream('file.txt');
var newRs = new Stream(); // << Here should be an in/out stream??
newRs.pipe = function(dest) {
dest.write(rs.read());
dest.write("New text at the end");
};
zip.addEntry(newRs, {name : 'file.txt'}, function() {
zip.finalize();
});
你可以实现一个transform (stream.Transform的子类)。然后在它的_flush方法中,你可以在输入流结束时输出任何你想要的内容。这可以在可读流和可写流之间进行管道连接。参考node的流模块文档了解实现细节。