Peter Bromberg said:
Can you provide one of your "Short but completes" on this? I'd like to check
it out myself as I am particularly fond of their library. I suspect they are
pretty busy on SharpDevelop 2.0 (which looks pretty interesting BTW) but I'd
be happy to add another voice to the roar of the crowd.
Sure. Here's the compression code:
using System;
using System.IO;
using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
class Comp
{
static void Main(string[] args)
{
using (Stream input = File.OpenRead (args[0]))
{
using (Stream output = File.OpenWrite (args[1]))
{
using (DeflaterOutputStream dos = new
DeflaterOutputStream
(output, new Deflater(Deflater.BEST_SPEED)))
{
byte[] buffer = new byte[16*1024];
int read;
while ((read=input.Read(buffer,0,buffer.Length))>0)
{
dos.Write (buffer, 0, read);
}
dos.Flush();
dos.Finish();
}
}
}
}
}
Here's the decompression code:
using System;
using System.IO;
using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
class Decomp
{
static void Main(string[] args)
{
using (Stream input = File.OpenRead (args[0]))
{
using (Stream output = File.OpenWrite (args[1]))
{
using (InflaterInputStream iis = new
InflaterInputStream (input))
{
byte[] buffer = new byte[16*1024];
int read;
while ((read=iis.Read(buffer, 0, buffer.Length))>0)
{
output.Write (buffer, 0, read);
}
}
}
}
}
}
Compile:
csc Comp.cs /r:ICSharpCode.SharpZipLib.dll
csc Decomp.cs /r:ICSharpCode.SharpZipLib.dll
Download test data (important - it only fails on certain data)
http://www.pobox.com/~skeet/original.dat
Compress:
comp original.dat compressed.dat
Decompress:
decomp compressed.dat decompressed.dat
Exception:
Unhandled Exception: ICSharpCode.SharpZipLib.SharpZipBaseException:
ICSharpCode.
SharpZipLib.SharpZipBaseException: Adler chksum doesn't match:
-1805756378 vs. -768451840
at ICSharpCode.SharpZipLib.Zip.Compression.Inflater.DecodeChksum()
at ICSharpCode.SharpZipLib.Zip.Compression.Inflater.Decode()
at ICSharpCode.SharpZipLib.Zip.Compression.Inflater.Inflate(Byte[]
buf, Int32 offset, Int32 len)
at
ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream.Rea
d(Byte[] b, Int32 off, Int32 len)
at
ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream.Rea
d(Byte[] b, Int32 off, Int32 len)
at Comp.Main(String[] args)
The code looks correct to me...