开源的 zip for csharp 

解决方案 »

  1.   

    网上下个ICSharpCode.SharpZipLib.dll
      

  2.   

    微软.net2.0提供了相应的类库。using System;
    using System.IO;
    using System.IO.Compression;public class GZipTest
    {
    public static int ReadAllBytesFromStream(Stream stream, byte[] buffer) 
    {
    // Use this method is used to read all bytes from a stream.
    int offset = 0;
    int totalCount = 0;
    while (true) 
    {
    int bytesRead = stream.Read(buffer, offset, 100); 
    if ( bytesRead == 0) 
    {
    break; 
    }
    offset += bytesRead;
    totalCount += bytesRead; 
    }
    return totalCount;
    }  public static bool CompareData(byte[] buf1, int len1, byte[] buf2, int len2) 
    {
    // Use this method to compare data from two different buffers.
    if (len1 != len2) 

    Console.WriteLine("Number of bytes in two buffer are different {0}:{1}", len1, len2);
    return false;
    } for ( int i= 0; i< len1; i++) 
    {
    if ( buf1[i] != buf2[i]) 
    {
    Console.WriteLine("byte {0} is different {1}|{2}", i, buf1[i], buf2[i]);
    return false;
    }
    }
    Console.WriteLine("All bytes compare.");
    return true; 
    } public static void GZipCompressDecompress(string filename)
    {
    Console.WriteLine("Test compression and decompression on file {0}", filename);
    FileStream infile;
    try
    {
    // Open the file as a FileStream object.
    infile = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
    byte[] buffer = new byte[infile.Length];
    // Read the file to ensure it is readable.
    int count = infile.Read(buffer, 0, buffer.Length);
    if ( count != buffer.Length) 
    {
    infile.Close();
    Console.WriteLine("Test Failed: Unable to read data from file"); 
    return;
    }
    infile.Close();
    MemoryStream ms = new MemoryStream();
    // Use the newly created memory stream for the compressed data.
    GZipStream compressedzipStream = new GZipStream(ms , CompressionMode.Compress, true);
    Console.WriteLine("Compression");
    compressedzipStream.Write(buffer, 0, buffer.Length);
    // Close the stream.
    compressedzipStream.Close();
    Console.WriteLine("Original size: {0}, Compressed size: {1}", buffer.Length, ms.Length); // Reset the memory stream position to begin decompression.
    ms.Position = 0;
    GZipStream zipStream = new GZipStream(ms, CompressionMode.Decompress);
    Console.WriteLine("Decompression");
    byte[] decompressedBuffer = new byte[buffer.Length + 100];
    // Use the ReadAllBytesFromStream to read the stream.
    int totalCount = GZipTest.ReadAllBytesFromStream(zipStream, decompressedBuffer);
    Console.WriteLine("Decompressed {0} bytes", totalCount); if( !GZipTest.CompareData(buffer, buffer.Length, decompressedBuffer, totalCount) ) 
    {
    Console.WriteLine("Error. The two buffers did not compare.");
    }
    zipStream.Close(); 
    } // end try
    catch (InvalidDataException)
    {
    Console.WriteLine("Error: The file being read contains invalid data.");
    }
    catch (FileNotFoundException)
    {
    Console.WriteLine("Error:The file specified was not found.");
    }
    catch (ArgumentException)
    {
    Console.WriteLine("Error: path is a zero-length string, contains only white space, or contains one or more invalid characters");
    }
    catch (PathTooLongException)
    {
    Console.WriteLine("Error: The specified path, file name, or both exceed the system-defined maximum length. For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.");
    }
    catch (DirectoryNotFoundException)
    {
    Console.WriteLine("Error: The specified path is invalid, such as being on an unmapped drive.");
    }
    catch (IOException)
    {
    Console.WriteLine("Error: An I/O error occurred while opening the file.");
    }
    catch (UnauthorizedAccessException)
    {
    Console.WriteLine("Error: path specified a file that is read-only, the path is a directory, or caller does not have the required permissions.");
    }
    catch (IndexOutOfRangeException)
    {
    Console.WriteLine("Error: You must provide parameters for MyGZIP.");
    }
    }
    public static void Main(string[] args)
    {
    string usageText = "Usage: MYGZIP <inputfilename>";
    //If no file name is specified, write usage text.
    if (args.Length == 0)
    {
    Console.WriteLine(usageText);
    }
    else
    {
    if (File.Exists(args[0]))
    GZipCompressDecompress(args[0]);
    }
    }
    }
      

  3.   

    1、微软提供的类库,但只支持2.0以上的版本,功能有一定的限制;
    2、使用开源的SharpZipLib;