初始化上传
This commit is contained in:
215
常用工具集/Utility/Core/ZipHelper.cs
Normal file
215
常用工具集/Utility/Core/ZipHelper.cs
Normal file
@@ -0,0 +1,215 @@
|
||||
using ICSharpCode.SharpZipLib.Zip;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace MES.Utility.Core
|
||||
{
|
||||
public static class ZipHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// 压缩
|
||||
/// </summary>
|
||||
/// <param name="filename"> 压缩后的文件名(包含物理路径)</param>
|
||||
/// <param name="directory">待压缩的文件夹(包含物理路径)</param>
|
||||
//public static void PackFiles(string filename, string directory)
|
||||
//{
|
||||
// try
|
||||
// {
|
||||
// FastZip fz = new FastZip();
|
||||
// fz.CreateEmptyDirectories = true;
|
||||
// fz.CreateZip(filename, directory, true, "");
|
||||
// fz = null;
|
||||
// }
|
||||
// catch (Exception)
|
||||
// {
|
||||
// throw;
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 判断是文件夹还是文件
|
||||
/// </summary>
|
||||
/// <param name="filePath"></param>
|
||||
/// <returns></returns>
|
||||
private static bool IsDir(string filePath)
|
||||
{
|
||||
FileInfo fi = new FileInfo(filePath);
|
||||
if ((fi.Attributes & FileAttributes.Directory) != 0)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 压缩
|
||||
/// </summary>
|
||||
/// <param name="fileName">压缩后的文件名(包含物理路径)</param>
|
||||
/// <param name="fileOrDirectoryPath">动长参数,待压缩的文件或者文件夹</param>
|
||||
/// <returns></returns>
|
||||
public static bool PackFiles(string fileName, params string[] fileOrDirectoryPath)
|
||||
{
|
||||
try
|
||||
{
|
||||
ZipStrings.UseUnicode = true;
|
||||
using (ZipOutputStream zipStream = new ZipOutputStream(File.Create(fileName)))
|
||||
{
|
||||
zipStream.SetComment("版本1.0");
|
||||
zipStream.SetLevel(6);//设值CompressionLevel,压缩比
|
||||
foreach (string filePath in fileOrDirectoryPath)
|
||||
{
|
||||
ZipMultiFiles(filePath, zipStream);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加密压缩
|
||||
/// </summary>
|
||||
/// <param name="fileName">压缩后的文件名(包含物理路径)</param>
|
||||
/// <param name="password">密码</param>
|
||||
/// <param name="fileOrDirectoryPath">动长参数,待压缩的文件或者文件夹</param>
|
||||
/// <returns></returns>
|
||||
public static bool PackFilesWithPassword(string fileName, string password, params string[] fileOrDirectoryPath)
|
||||
{
|
||||
try
|
||||
{
|
||||
ZipStrings.UseUnicode = true;
|
||||
using (ZipOutputStream zipStream = new ZipOutputStream(File.Create(fileName)))
|
||||
{
|
||||
zipStream.SetComment("版本1.0");
|
||||
zipStream.SetLevel(6);//设值CompressionLevel,压缩比
|
||||
if (!password.IsNullOrEmpty())
|
||||
{
|
||||
zipStream.Password = password;
|
||||
}
|
||||
foreach (string filePath in fileOrDirectoryPath)
|
||||
{
|
||||
ZipMultiFiles(filePath, zipStream);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static void ZipMultiFiles(string file, ZipOutputStream zipStream, string lastName = "")
|
||||
{
|
||||
file = file.Replace("\\", "/");
|
||||
if (!IsDir(file))
|
||||
{
|
||||
if (!File.Exists(file))
|
||||
{
|
||||
throw new Exception($"文件{file}不存在");
|
||||
}
|
||||
using (FileStream streamReader = File.OpenRead(file))
|
||||
{
|
||||
string path = Path.GetFileName(file);
|
||||
if (lastName != "")
|
||||
{
|
||||
path = lastName + "/" + path;
|
||||
}
|
||||
ZipEntry zipEntry = new ZipEntry(path);
|
||||
zipEntry.DateTime = DateTime.Now;
|
||||
zipEntry.Size = streamReader.Length;
|
||||
zipStream.PutNextEntry(zipEntry);//压入文件
|
||||
int sourceCount = 0;
|
||||
byte[] buffer = new byte[4096 * 1024];
|
||||
while ((sourceCount = streamReader.Read(buffer, 0, buffer.Length)) > 0)
|
||||
{
|
||||
zipStream.Write(buffer, 0, sourceCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!Directory.Exists(file))
|
||||
{
|
||||
throw new Exception($"文件夹{file}不存在");
|
||||
}
|
||||
string[] fileArray = Directory.GetFileSystemEntries(file);
|
||||
string folderName = new DirectoryInfo(file).Name; //Regex.Match(file, @"[^\/:*\?\”“\<>|,\\]*$").ToString();
|
||||
if (lastName != "")
|
||||
{
|
||||
folderName = lastName + "/" + folderName;
|
||||
}
|
||||
if (fileArray.Length == 0)
|
||||
{
|
||||
ZipEntry zipEntry = new ZipEntry(folderName + "/");
|
||||
zipStream.PutNextEntry(zipEntry);
|
||||
}
|
||||
foreach (string f in fileArray)
|
||||
{
|
||||
ZipMultiFiles(f, zipStream, folderName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 解压缩
|
||||
/// </summary>
|
||||
/// <param name="file">待解压文件名(包含物理路径)</param>
|
||||
/// <param name="dir"> 解压到哪个目录中(包含物理路径)</param>
|
||||
public static bool UnpackFiles(string file, string dir)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!Directory.Exists(dir))
|
||||
{
|
||||
Directory.CreateDirectory(dir);
|
||||
}
|
||||
ZipInputStream s = new ZipInputStream(File.OpenRead(file));
|
||||
ZipEntry theEntry;
|
||||
while ((theEntry = s.GetNextEntry()) != null)
|
||||
{
|
||||
string directoryName = Path.GetDirectoryName(theEntry.Name);
|
||||
string fileName = Path.GetFileName(theEntry.Name);
|
||||
if (directoryName != String.Empty)
|
||||
{
|
||||
Directory.CreateDirectory(dir + directoryName);
|
||||
}
|
||||
if (fileName != String.Empty)
|
||||
{
|
||||
FileStream streamWriter = File.Create(dir + theEntry.Name);
|
||||
int size = 2048;
|
||||
byte[] data = new byte[2048];
|
||||
while (true)
|
||||
{
|
||||
size = s.Read(data, 0, data.Length);
|
||||
if (size > 0)
|
||||
{
|
||||
streamWriter.Write(data, 0, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
streamWriter.Close();
|
||||
}
|
||||
}
|
||||
s.Close();
|
||||
return true;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user