//压缩文件
public static void Zip(string srcFile, string dstFile, int bufferSize)
{
//创建压缩文件路径
using (FileStream fileStreamOut = new FileStream(dstFile, FileMode.Create, FileAccess.Write))
{
string[] fileList = srcFile.Split('*');
//创建压缩流
using (ZipOutputStream zipOutStream = new ZipOutputStream(fileStreamOut))
{
//循环文件列表 (我这里并没有做判断,在操作的时候 需要进行判断 当前路径是否有效,如果路径是无效的,后面的操作会抛出异常)
for (int i = 0; i < fileList.Length; i++)
{
//打开需要压缩的文件
using (FileStream fileStreamIn = new FileStream(fileList[i], FileMode.Open, FileAccess.Read))
{
if (null == fileStreamIn)
{
return;
}
byte[] buffer = new byte[fileStreamIn.Length];
ZipEntry entry = new ZipEntry(Path.GetFileName(fileList[i]));
zipOutStream.PutNextEntry(entry);
int size;
size = fileStreamIn.Read(buffer, 0, buffer.Length);
zipOutStream.Write(buffer, 0, size);
zipOutStream.Flush();
}
}
}
}
}
/// <summary>
/// 使用SharpZipLib解压缩Zip文件
/// </summary>
/// <param name="srcFile">Zip源文件</param>
/// <param name="dstFile">解压出来的文件</param>
/// <param name="bufferSize">缓冲大小</param>
public static void UnZip(string srcFile, string dstFile, int bufferSize)
{
using (FileStream fileStreamIn = new FileStream(srcFile, FileMode.Open, FileAccess.Read))
{
using (ZipInputStream zipInStream = new ZipInputStream(fileStreamIn))
{
ZipEntry entry = zipInStream.GetNextEntry();
//循环读取,是否包含下一个文件
while (entry != null)
{
//此为当前文件的大小
long Length = zipInStream.Length;
//此为文件的名称
string name = entry.Name;
using (FileStream fileStreamOut = new FileStream(dstFile + @"\" + entry.Name, FileMode.Create, FileAccess.Write))
{
int size;
byte[] buffer = new byte[bufferSize];
do
{
size = zipInStream.Read(buffer, 0, buffer.Length);
fileStreamOut.Write(buffer, 0, size);
}
while (size > 0);
fileStreamOut.Flush();
}
entry = zipInStream.GetNextEntry();
}
}
}
}
C# 基于SharpZipLib 实现 文件压缩,以及解压
最新推荐文章于 2023-05-09 17:35:54 发布