c# 文件压缩zip或将zip文件解压的方法

1.必须Dll:

ICSharpCode.SharpZipLib.dll。可从Nutget程序包中获取。

2.压缩文件

/// <summary>

/// 压缩文件成zip

/// </summary>

/// <param name="fileZip">压缩成zip文件的绝对路径</param>

/// <param name="fileName">被压缩指定文件的名字</param>

/// <param name="zipFilePath"></param>

/// <returns></returns>

public bool CreateZipFile(string fileZip,string fileName, string zipFilePath)

{

bool isZip = false;

if (!Directory.Exists(zipFilePath))

{

Logger.Info($"Cannot find directory {zipFilePath}", false, "FileToZip");

return isZip;

}

try

{

string[] filenames = Directory.GetFiles(zipFilePath);

using (ZipOutputStream s = new ZipOutputStream(File.Create(fileZip)))

{

s.SetLevel(9); // 压缩级别 0-9

//s.Password = "123"; //Zip压缩文件密码

byte[] buffer = new byte[4096]; //缓冲区大小

foreach (string file in filenames.ToList())

{

if (file== zipFilePath+fileName)//指定被压缩文件的绝对路径

{

ZipEntry entry = new ZipEntry(Path.GetFileName(file));

entry.DateTime = DateTime.Now;

s.PutNextEntry(entry);

using (FileStream fs = File.OpenRead(file))

{

int sourceBytes;

do

{

sourceBytes = fs.Read(buffer, 0, buffer.Length);

s.Write(buffer, 0, sourceBytes);

} while (sourceBytes > 0);

fs.Close();

fs.Dispose();

}

break;

}

}

s.Finish();

s.Close();

isZip = true;

}

}

catch (Exception ex)

{

Logger.Info($"Exception during processing {0}", false, "FileToZip");

}

return isZip;

}

3.将zip文件解压

/// <summary>

/// 解压文件

/// </summary>

/// <param name="zipFilePath">压缩文件的绝对路径</param>

public void UnZipFile(string zipFilePath)

{

if (!File.Exists(zipFilePath))

{

Logger.Info($"Cannot find file {zipFilePath}", false, "FileToZip");

return;

}

using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))

{

ZipEntry theEntry;

while ((theEntry = s.GetNextEntry()) != null)

{

string directoryName = Path.GetDirectoryName(theEntry.Name);

string fileName = Path.GetFileName(theEntry.Name);

// create directory

if (directoryName?.Length > 0)

{

Directory.CreateDirectory(directoryName);

}

if (!string.IsNullOrEmpty(fileName))

{

using (FileStream streamWriter = File.Create(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;

}

}

}

}

}

}

}

4.其它:其中的Logger是Log4的用法。

以上这篇c# 文件压缩zip或将zip文件解压的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是 c# 文件压缩zip或将zip文件解压的方法 的全部内容, 来源链接: utcz.com/z/313332.html

回到顶部