79 lines
1.7 KiB
C#
79 lines
1.7 KiB
C#
// 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 = NativeVersion.Use32Bit ? NativeZip.OpenArchive32 (Stream.IOFunctions32, append) : NativeZip.OpenArchive64 (Stream.IOFunctions64, 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");
|
||
|
||
if (NativeVersion.Use32Bit)
|
||
NativeZip.OpenFile32 (Handle, filename, ConvertCompression (option));
|
||
else
|
||
NativeZip.OpenFile64 (Handle, filename, ConvertCompression (option));
|
||
return new ZipWriteStream (this);
|
||
}
|
||
|
||
public void Dispose ()
|
||
{
|
||
NativeZip.CloseArchive (Handle);
|
||
Stream.Close ();
|
||
}
|
||
}
|
||
}
|