// ZipArchive.cs created with MonoDevelop // User: alan at 16:31 20/10/2008 // // To change standard headers go to Edit->Preferences->Coding->Standard Headers // using System; using System.IO; using System.IO.Packaging; namespace zipsharp { class ZipArchive : IDisposable { internal bool FileActive { get; set; } internal ZipHandle Handle { get; private set; } ZipStream Stream { get; set; } public ZipArchive (string filename, Append append) : this (File.Open (filename, FileMode.OpenOrCreate), append) { } public ZipArchive (Stream stream, Append append) : this (stream, append, false) { } public ZipArchive (Stream stream, Append append, bool ownsStream) { Stream = new ZipStream (stream, ownsStream); Handle = NativeZip.OpenArchive (Stream.IOFunctions, append); } static int ConvertCompression (System.IO.Packaging.CompressionOption option) { switch (option) { case CompressionOption.SuperFast: return 2; case CompressionOption.Fast: return 4; case CompressionOption.Normal: return 6; case CompressionOption.Maximum: return 9; default: return 0; } } public Stream GetStream (string filename, System.IO.Packaging.CompressionOption option) { if (FileActive) throw new InvalidOperationException ("A file is already open"); NativeZip.OpenFile (Handle, filename, ConvertCompression (option)); return new ZipWriteStream (this); } public void Dispose () { NativeZip.CloseArchive (Handle); Stream.Close (); } } }