2013-08-29 57 views
2

我做了下面的事情,和node.js一起玩。 zipfiles文件夾中的文件會相應地壓縮,並且所有內容都可以正常工作。 但是我在cmd上發現錯誤,我不知道它來自哪裏或者如何解決它。nodejs扔呃; //未處理的'錯誤'事件

events.js:72 
     throw er; // Unhandled 'error' event 
      ^
Error: write after end 
    at writeAfterEnd (_stream_writable.js:130:12) 
    at Gzip.Writable.write (_stream_writable.js:178:5) 
    at write (_stream_readable.js:583:24) 
    at flow (_stream_readable.js:592:7) 
    at ReadStream.pipeOnReadable (_stream_readable.js:624:5) 
    at ReadStream.EventEmitter.emit (events.js:92:17) 
    at emitReadable_ (_stream_readable.js:408:10) 
    at emitReadable (_stream_readable.js:404:5) 
    at readableAddChunk (_stream_readable.js:165:9) 
    at ReadStream.Readable.push (_stream_readable.js:127:10) 

這裏是我的腳本:

var zlib = require('zlib'); 
var gzip = zlib.createGzip(); 
var fs = require('fs'); 
var zip = { 
    zipAll: function(dir){ 
     //files to zip 
     fs.readdir(dir, function(err, data){ 
      if(err) throw(err); 
      var arrayValue = data.toString().split(','); 

      //files with .gz at the end, needs to be excluded 
       for(var i=0; i<arrayValue.length; i+=1){ 
        console.log("Zipping following files: " + arrayValue[i]); 
        var input = fs.createReadStream('zipfiles/' + arrayValue[i]); 
        var output = fs.createWriteStream('zipfiles/input'+[i]+'.txt'+'.gz'); 
        input.pipe(gzip).pipe(output);     
       } 
     }); 
    } 
}; 
zip.zipAll('zipfiles'); 

感謝

回答

2

gzip的對象是有點靠不住的(據我所知無證)重用多個文件。解決問題的最簡單方法是簡單地使用每個文件的單獨對象gzip進行壓縮,例如;

for(var i=0; i<arrayValue.length; i+=1){ 
    console.log("Zipping following files: " + arrayValue[i]); 
    var input = fs.createReadStream('zipfiles/' + arrayValue[i]); 
    var output = fs.createWriteStream('zipfiles/input'+[i]+'.txt'+'.gz'); 
    input.pipe(zlib.createGzip()).pipe(output);     
} 
相關問題