网上有很多zip操作的,但是存在不少问题,只能自己改了一个能用的,希望能帮助需要的朋友,如果觉得好用记得给我留言,加下人气哦,废话不多多说,上代码\
/**/
/// <summary>
/// 实现压缩功能
/// </summary>
/// <param name="filenameToZip">要压缩文件(绝对文件路径)</param>
/// <param name="Zipedfiledname">压缩(绝对文件路径)</param>
/// <param name="CompressionLevel">压缩比</param>
/// <param name="password">加密密码</param>
/// <param name="comment">压缩文件描述</param>
/// <returns>异常信息</returns>
public static string MakeZipFile(string[] filenameToZip, string Zipedfiledname, int CompressionLevel,
string password, string comment)
{
try
{
//使用正则表达式-判断压缩文件路径
System.Text.RegularExpressions.Regex newRegex = new System.Text.
RegularExpressions.Regex(@"^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w ]*.*))");
if (!newRegex.Match(Zipedfiledname).Success)
{
File.Delete(Zipedfiledname);
return "压缩文件的路径有误!";
}
//创建ZipFileOutPutStream
ZipOutputStream newzipstream = new ZipOutputStream(File.Open(Zipedfiledname,
FileMode.OpenOrCreate));
//判断Password
if (password != null && password.Length > 0)
{
newzipstream.Password = password;
}
if (comment != null && comment.Length > 0)
{
newzipstream.SetComment(comment);
}
//设置CompressionLevel
newzipstream.SetLevel(CompressionLevel); //-查看0 - means store only to 9 - means best compression
//执行压缩
foreach (string filename in filenameToZip)
{
FileStream newstream = File.OpenRead(filename);//打开预压缩文件
//判断路径
if (!newRegex.Match(Zipedfiledname).Success)
{
File.Delete(Zipedfiledname);
return "压缩文件目标路径不存在!";
}
byte[] setbuffer = new byte[newstream.Length];
newstream.Read(setbuffer, 0, setbuffer.Length);//读入文件
//新建ZipEntrity
ZipEntry newEntry = new ZipEntry(filename);
//设置时间-长度
newEntry.DateTime = DateTime.Now;
newEntry.Size = newstream.Length;
newstream.Close();
newzipstream.PutNextEntry(newEntry);//压入
newzipstream.Write(setbuffer, 0, setbuffer.Length);
}
//重复压入操作
newzipstream.Finish();
newzipstream.Close();
}
catch (Exception e)
{
//出现异常
File.Delete(Zipedfiledname);
return e.Message.ToString();
}
return "";
}
public static void UnZip(string zipfilepath, string unzippath)
{
ZipInputStream s = new ZipInputStream(File.OpenRead(zipfilepath));
ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{
//string directoryName = Path.GetDirectoryName(unzippath);
string directoryName = unzippath;
string fileName = Path.GetFileName(theEntry.Name);
//生成解压目录
Directory.CreateDirectory(directoryName);
if (fileName != String.Empty)
{
//如果文件的压缩后大小为0那么说明这个文件是空的,因此不需要进行读出写入
if (theEntry.CompressedSize == 0)
break;
//解压文件到指定的目录
//directoryName = Path.GetDirectoryName(unzippath + theEntry.Name);
//建立下面的目录和子目录
Directory.CreateDirectory(directoryName);
FileStream streamWriter = File.Create(unzippath + 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();
}
需要加项目加上两个dll