2017-01-08 158 views
0

我想在node.js中使用Zlib庫解壓縮文本文件,但當文件的Readstream內容朝向Gunzip對象滾動時,出現意外的文件錯誤結束,這裏是我的代碼片段:解壓文件時出現文件錯誤意外結束node.js

const fs = require('fs'); 
const zlib = require("zlib"); 

var readable = fs.createReadStream(__dirname + '/greet.txt'); 
var readableGz = fs.createReadStream(__dirname + '/greet.txt.gz'); 
var writableGz = fs.createWriteStream(__dirname + '/greet.txt.gz'); 
var gZip = zlib.createGzip(); 
var gUnZip = zlib.createGunzip(); 

readable.pipe(gZip).pipe(writableGz); // compress file 
readableGz.pipe(gUnZip).on("error", function(e){ // uncompress file 
    console.log("error, " + e); 
}); 

的greet.txt中有一些隨機的文字,並用在目錄中已經創建的所有文件,但是一個錯誤事件被觸發時的最後一行到達

+0

你正在編寫和並行讀取。等到寫完之前再閱讀。 – cartant

+0

如果我第一次壓縮文件,然後評論該部分,並只是運行該部分,當我嘗試解壓縮它,同樣的錯誤仍在發生 –

回答

2

所有node操作都是異步的,因此您必須監聽finish事件。

readable.pipe(gZip).pipe(writableGz).on('finish', function() { // finished 
    console.log('Done. Now you can start reading.'); 
}); 

這裏是工作代碼:

const fs = require('fs'); 
const zlib = require("zlib"); 

var readable = fs.createReadStream('./greet.txt'); 
var writableGz = fs.createWriteStream('./greet.txt.gz'); 
var gZip = zlib.createGzip(); 
var gUnZip = zlib.createGunzip(); 

readable.pipe(gZip).pipe(writableGz).on('finish', function() { // finished 
    console.log('Done. Now you can start reading.'); 
    var readableGz = fs.createReadStream('./greet.txt.gz'); 
    readableGz.pipe(gUnZip).on("error", function (e) { // uncompress file 
     console.log("error, " + e); 
    }); 
}); 
+0

我試過這個:readable.pipe(gZip).pipe(writableGz); \t //壓縮文件 writableGz.end(函數(){ 的console.log( '完成在這裏,您可以開始閱讀。'); \t readableGz.pipe(gunzip解)。在( 「錯誤」,功能(E ){\t //解壓文件 \t \t console.log(「error,」+ e); \t}); });但仍然無法正常工作 –

+0

是的,.gz文件被清空,但同樣的錯誤仍然被觸發 –

+0

@PabloMarino是否解決了這個問題? –

相關問題