1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
// 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 ();
}
}
}
|