using SharpCompress.Archives;
using SharpCompress.Archives.GZip;
using SharpCompress.Archives.Zip;
using SharpCompress.Common.GZip;
using SharpCompress.Common;
using SharpCompress.Common.SevenZip;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace PackingPress.Common
{
public class ZipHelper
{
private ZipHelper(){ }
public static void Zips(string inDirectory, string zipFile)
{
ArchiveEncoding archiveEncoding = new ArchiveEncoding();
archiveEncoding.Default = Encoding.GetEncoding("utf-8");
SharpCompress.Writers.WriterOptions options = new SharpCompress.Writers.WriterOptions(CompressionType.Deflate);
options.ArchiveEncoding = archiveEncoding;
options.LeaveStreamOpen = false;
using (var archive = ZipArchive.Create())
{
archive.AddAllFromDirectory(inDirectory + "\\");
archive.DeflateCompressionLevel = SharpCompress.Compressors.Deflate.CompressionLevel.BestSpeed;
using (FileStream fs_scratchPath = new FileStream(zipFile, FileMode.Create, FileAccess.Write))
{
try
{
archive.SaveTo(fs_scratchPath, options);
}
catch (Exception ex)
{
FileHelper.AppendWriteFile("InstallLog.txt", ex.Message + "|" + ex.StackTrace);
}
}
}
}
///
/// 解压文件
///
/// 解压文件路径
/// 解压文件后路径
public static void Decompression(string zipFile, string outDirectory)
{
if (File.Exists(zipFile))
{
ArchiveEncoding archiveEncoding = new ArchiveEncoding();
archiveEncoding.Default = Encoding.GetEncoding("utf-8");
SharpCompress.Readers.ReaderOptions options = new SharpCompress.Readers.ReaderOptions();
options.ArchiveEncoding = archiveEncoding;
options.LeaveStreamOpen = false;
var archive = ArchiveFactory.Open(zipFile);
foreach (var entry in archive.Entries)
{
if (!entry.IsDirectory)
{
entry.WriteToDirectory(outDirectory, new ExtractionOptions { ExtractFullPath = true, Overwrite = true });
}
}
}
}
///
/// 解压文件7z
///
///
///
///
///
public static bool DeZip(string filePath, string outPath, bool waitForCompleted = false)
{
using (Process ps = new Process())
{
ps.StartInfo.FileName = AppDomain.CurrentDomain.BaseDirectory + "\\7z\\7za.exe";
ps.StartInfo.Arguments = $"x \"{filePath}\" -o\"{outPath}\" -y";
ps.StartInfo.UseShellExecute = false;
ps.StartInfo.CreateNoWindow = true;
ps.StartInfo.Verb = "runas";
if (waitForCompleted)
{
ps.StartInfo.RedirectStandardOutput = true;
ps.StartInfo.RedirectStandardInput = true;
}
else
{
ps.StartInfo.RedirectStandardOutput = false;
ps.StartInfo.RedirectStandardInput = false;
}
ps.Start();
if (waitForCompleted)
{
string text = ps.StandardOutput.ReadToEnd();
if (text.IndexOf("Everything is Ok") > -1)
{
ps.StandardInput.Write("Exit");
return true;
}
}
else
{
ps.WaitForExit(10000);
}
return false;
}
}
///
/// 压缩文件7z
///
///
///
///
///
public static bool EnZip(string filePath, string zipFile, bool waitForCompleted = false)
{
using (Process ps = new Process())
{
ps.StartInfo.FileName = AppDomain.CurrentDomain.BaseDirectory + "\\7z\\7za.exe";
ps.StartInfo.Arguments = $"a -t7z \"{zipFile}\" \"{filePath}\"";
ps.StartInfo.UseShellExecute = false;
ps.StartInfo.CreateNoWindow = true;
ps.StartInfo.Verb = "runas";
if (waitForCompleted)
{
ps.StartInfo.RedirectStandardOutput = true;
ps.StartInfo.RedirectStandardInput = true;
}
else
{
ps.StartInfo.RedirectStandardOutput = false;
ps.StartInfo.RedirectStandardInput = false;
}
ps.Start();
if (waitForCompleted)
{
string text = ps.StandardOutput.ReadToEnd();
if (text.IndexOf("Everything is Ok") > -1)
{
ps.StandardInput.Write("Exit");
return true;
}
}
else
{
ps.WaitForExit(10000);
}
return false;
}
}
}
}