1
wangsheng
2022-03-22 49d5052a4a51a639d1c75d6feca56f8ae2e5e568
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
 
 
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;
    }
  }
}