Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GZipStream not reading the whole file

Tags:

c#

gzipstream

I have some code that downloads gzipped files, and decompresses them. The problem is, I can't get it to decompress the whole file, it only reads the first 4096 bytes and then about 500 more.

Byte[] buffer = new Byte[4096];
int count = 0;
FileStream fileInput = new FileStream("input.gzip", FileMode.Open, FileAccess.Read, FileShare.Read);
FileStream fileOutput = new FileStream("output.dat", FileMode.Create, FileAccess.Write, FileShare.None);
GZipStream gzipStream = new GZipStream(fileInput, CompressionMode.Decompress, true);

// Read from gzip steam
while ((count = gzipStream.Read(buffer, 0, buffer.Length)) > 0)
{
    // Write to output file
    fileOutput.Write(buffer, 0, count);
}

// Close the streams
...

I've checked the downloaded file; it's 13MB when compressed, and contains one XML file. I've manually decompressed the XML file, and the content is all there. But when I do it with this code, it only outputs the very beginning of the XML file.

Anyone have any ideas why this might be happening?

like image 845
Edgar Avatar asked Jun 18 '10 09:06

Edgar


2 Answers

EDIT

Try not leaving the GZipStream open:

GZipStream gzipStream = new GZipStream(fileInput, CompressionMode.Decompress,  
                                                                         false);

or

GZipStream gzipStream = new GZipStream(fileInput, CompressionMode.Decompress);
like image 151
David Neale Avatar answered Oct 26 '22 23:10

David Neale


I ended up using a gzip executable to do the decompression instead of a GZipStream. It can't handle the file for some reason, but the executable can.

like image 39
Edgar Avatar answered Oct 26 '22 23:10

Edgar