- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using ICSharpCode.SharpZipLib.Zip; //开源工具,可免费下载:下载地址:
- //http://files.cnblogs.com/xiaowei0705/SharpZipLib_0860_Bin.zip
- using System.IO;
- namespace Package
- {
- class Class1
- {
- #region 加压解压方法
- /// <summary>
- /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略)
- /// </summary>
- /// <param name="dirPath">被压缩的文件夹夹路径</param>
- /// <param name="zipFilePath">生成压缩文件的路径,为空则默认与被压缩文件夹同一级目录,名称为:文件夹名+.zip</param>
- /// <param name="err">出错信息</param>
- /// <returns>是否压缩成功</returns>
- public bool ZipFile(string dirPath, string zipFilePath, out string err)
- {
- err = "";
- if (dirPath == string.Empty)
- {
- err = "要压缩的文件夹不能为空!";
- return false;
- }
- if (!Directory.Exists(dirPath))
- {
- err = "要压缩的文件夹不存在!";
- return false;
- }
- //压缩文件名为空时使用文件夹名+.zip
- if (zipFilePath == string.Empty)
- {
- if (dirPath.EndsWith("\"))
- {
- dirPath = dirPath.Substring(0, dirPath.Length - 1);
- }
- zipFilePath = dirPath + ".zip";
- }
- try
- {
- string[] filenames = Directory.GetFiles(dirPath);
- using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFilePath)))
- {
- s.SetLevel(9);
- byte[] buffer = new byte[4096];
- foreach (string file in filenames)
- {
- 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);
- }
- }
- s.Finish();
- s.Close();
- }
- }
- catch (Exception ex)
- {
- err = ex.Message;
- return false;
- }
- return true;
- }
- /// <summary>
- /// 功能:解压zip格式的文件。
- /// </summary>
- /// <param name="zipFilePath">压缩文件路径</param>
- /// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param>
- /// <param name="err">出错信息</param>
- /// <returns>解压是否成功</returns>
- public bool UnZipFile(string zipFilePath, string unZipDir, out string err)
- {
- err = "";
- if (zipFilePath == string.Empty)
- {
- err = "压缩文件不能为空!";
- return false;
- }
- if (!File.Exists(zipFilePath))
- {
- err = "压缩文件不存在!";
- return false;
- }
- //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹
- if (unZipDir == string.Empty)
- unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
- if (!unZipDir.EndsWith("\"))
- unZipDir += "\";
- if (!Directory.Exists(unZipDir))
- Directory.CreateDirectory(unZipDir);
- try
- {
- 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);
- if (directoryName.Length > 0)
- {
- Directory.CreateDirectory(unZipDir + directoryName);
- }
- if (!directoryName.EndsWith("\"))
- directoryName += "\";
- if (fileName != String.Empty)
- {
- using (FileStream streamWriter = File.Create(unZipDir + 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;
- }
- }
- }
- }
- }//while
- }
- }
- catch (Exception ex)
- {
- err = ex.Message;
- return false;
- }
- return true;
- }//解压结束
- #endregion
- }
- }
复制代码 |
|