GZipStream and decompression
c#, compression, gzipstream
Solution
My first thought is that you haven't closed `csStream`. If you use `using` this happens automatically. Since gzip buffers data, you could be missing some.
Secondly; don't increment `offset`; that is the offset in the buffer (not the stream). Leave at 0:
using (Stream fs = File.OpenRead("gj.txt"))
using (Stream fd = File.Create("gj.zip"))
using (Stream csStream = new GZipStream(fd, CompressionMode.Compress))
{
byte[] buffer = new byte[1024];
int nRead;
while ((nRead = fs.Read(buffer, 0, buffer.Length))> 0)
{
csStream.Write(buffer, 0, nRead);
}
}
using (Stream fd = File.Create("gj.new.txt"))
using (Stream fs = File.OpenRead("gj.zip"))
using (Stream csStream = new GZipStream(fs, CompressionMode.Decompress))
{
byte[] buffer = new byte[1024];
int nRead;
while ((nRead = csStream.Read(buffer, 0, buffer.Length)) > 0)
{
fd.Write(buffer, 0, nRead);
}
}
Problem
I have code that should do the compression: ``` FileStream fs = new FileStream("g:\\gj.txt", FileMode.Open); FileStream fd = new FileStream("g:\\gj.zip", FileMode.Create); GZipStream csStream = new GZipStream(fd, CompressionMode.Compress); byte[] compressedBuffer = new byte[500]; int offset = 0; int nRead; nRead = fs.Read(compressedBuffer, offset, compressedBuffer.Length); while (nRead > 0) { csStream.Write(compressedBuffer, offset, nRead); offset = offset + nRead; nRead = fs.Read(compressedBuffer, offset, compressedBuffer.Length); } fd.Close(); fs.Close(); ``` and I think it does, but I want to decompress what was compressed the way above. I do somethink like that: ``` FileStream fd = new FileStream("g:\\gj.new", FileMode.Create); FileStream fs = new FileStream("g:\\gj.zip", FileMode.Open); GZipStream csStream = new GZipStream(fs, CompressionMode.Decompress); byte[] decompressedBuffer = new byte[500]; int offset = 0; int nRead; nRead=csStream.Read(decompressedBuffer, offset, decompressedBuffer.Length); while (nRead > 0) { fd.Write(decompressedBuffer, offset, nRead); offset = offset + nRead; nRead = csStream.Read(decompressedBuffer, offset, decompressedBuffer.Length); } fd.Close(); fs.Close(); ``` and here it doesn't... I've got nRead = 0 befeore entering the loop... What I do wrong?? The test file I use is the simpliest TEXT file (size: 104 bytes)...