2014-08-13 10:39:27 +01:00
|
|
|
|
// 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);
|
2017-04-10 11:41:01 +00:00
|
|
|
|
Handle = NativeVersion.Use32Bit ? NativeZip.OpenArchive32 (Stream.IOFunctions32, append) : NativeZip.OpenArchive64 (Stream.IOFunctions64, append);
|
2014-08-13 10:39:27 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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");
|
2017-04-10 11:41:01 +00:00
|
|
|
|
|
|
|
|
|
if (NativeVersion.Use32Bit)
|
|
|
|
|
NativeZip.OpenFile32 (Handle, filename, ConvertCompression (option));
|
|
|
|
|
else
|
|
|
|
|
NativeZip.OpenFile64 (Handle, filename, ConvertCompression (option));
|
2014-08-13 10:39:27 +01:00
|
|
|
|
return new ZipWriteStream (this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Dispose ()
|
|
|
|
|
{
|
|
|
|
|
NativeZip.CloseArchive (Handle);
|
|
|
|
|
Stream.Close ();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|