|
|
using Ionic.Zip;
|
using System;
|
using System.Collections.Generic;
|
using System.IO;
|
using System.Linq;
|
using System.Text;
|
|
public static class ZipUtils
|
{
|
public static Stream ZipCompress(Stream sourceStream)
|
{
|
string entryName = "zip";
|
MemoryStream memoryStream = new MemoryStream();
|
if (sourceStream != null)
|
{
|
long num = 0L;
|
try
|
{
|
num = sourceStream.Position;
|
sourceStream.Position = 0L;
|
using (ZipFile zipFile = new ZipFile())
|
{
|
zipFile.AddEntry(entryName, sourceStream);
|
zipFile.Save((Stream) memoryStream);
|
memoryStream.Position = 0L;
|
}
|
}
|
catch
|
{
|
}
|
finally
|
{
|
try
|
{
|
sourceStream.Position = num;
|
}
|
catch
|
{
|
}
|
}
|
}
|
return (Stream) memoryStream;
|
}
|
|
public static Stream ZipDecompress(byte[] data)
|
{
|
Stream stream = (Stream) new MemoryStream();
|
if (data != null)
|
{
|
try
|
{
|
using (ZipFile zipFile = ZipFile.Read((Stream) new MemoryStream(data)))
|
{
|
if (zipFile.Entries.Count > 0)
|
{
|
Enumerable.First<ZipEntry>((IEnumerable<ZipEntry>) zipFile.Entries).Extract(stream);
|
stream.Position = 0L;
|
}
|
}
|
}
|
catch
|
{
|
}
|
}
|
return stream;
|
}
|
|
public static bool CompressMulti(List<string> list, string strZipName, bool IsDirStruct)
|
{
|
try
|
{
|
using (ZipFile zipFile = new ZipFile(Encoding.Default))
|
{
|
foreach (string str in list)
|
{
|
string fileName = Path.GetFileName(str);
|
if (Directory.Exists(str))
|
{
|
if (IsDirStruct)
|
zipFile.AddDirectory(str, fileName);
|
else
|
zipFile.AddDirectory(str);
|
}
|
if (File.Exists(str))
|
zipFile.AddFile(str);
|
}
|
zipFile.Save(strZipName);
|
return true;
|
}
|
}
|
catch (Exception ex)
|
{
|
return false;
|
}
|
}
|
|
public static bool Decompression(Stream inputStream, ref List<Stream> outputStreamList, bool overWrite)
|
{
|
try
|
{
|
using (ZipFile zipFile = ZipFile.Read(inputStream, new ReadOptions()
|
{
|
Encoding = Encoding.Default
|
}))
|
{
|
foreach (ZipEntry zipEntry in zipFile)
|
{
|
MemoryStream memoryStream = new MemoryStream();
|
outputStreamList.Add((Stream) memoryStream);
|
zipEntry.Extract((Stream) memoryStream);
|
}
|
return true;
|
}
|
}
|
catch (Exception ex)
|
{
|
return false;
|
}
|
}
|
}
|