/// <summary> /// 压缩文件和文件夹 /// </summary> /// <param name="_fileOrDirectoryArray">文件夹路径和文件名</param> /// <param name="_outputPathName">压缩后的输出路径文件名</param> /// <param name="_password">压缩密码</param> /// <param name="_zipCallback">ZipCallback对象,负责回调</param> /// <returns></returns> public static bool Zip(string[] _fileOrDirectoryArray, string _outputPathName, string _password = null, ZipCallback _zipCallback = null) { if ((null == _fileOrDirectoryArray) || string.IsNullOrEmpty(_outputPathName)) { if (null != _zipCallback) { _zipCallback.OnFinished(false); } return(false); } ZipOutputStream zipOutputStream = new ZipOutputStream(File.Create(_outputPathName)); zipOutputStream.SetLevel(6); // 压缩质量和压缩速度的平衡点 if (!string.IsNullOrEmpty(_password)) { zipOutputStream.Password = _password; } for (int index = 0; index < _fileOrDirectoryArray.Length; ++index) { bool result = false; string fileOrDirectory = _fileOrDirectoryArray[index]; if (Directory.Exists(fileOrDirectory)) { result = ZipDirectory(fileOrDirectory, string.Empty, zipOutputStream, _zipCallback); } else if (File.Exists(fileOrDirectory)) { result = ZipFile(fileOrDirectory, string.Empty, zipOutputStream, _zipCallback); } if (!result) { if (null != _zipCallback) { _zipCallback.OnFinished(false); } return(false); } } zipOutputStream.Finish(); zipOutputStream.Close(); if (null != _zipCallback) { _zipCallback.OnFinished(true); } return(true); }
/// <summary> /// 压缩文件和文件夹; /// </summary> /// <param name="fileOrDirectoryArray">文件夹路径和文件名</param> /// <param name="outputPathName">压缩后的输出路径文件名</param> /// <param name="password">压缩密码</param> /// <param name="zipCallback">ZipCallback对象,负责回调</param> /// <returns></returns> public static bool Zip(string[] fileOrDirectoryArray, string outputPathName, string password = null, ZipCallback zipCallback = null) { if ((null == fileOrDirectoryArray) || string.IsNullOrEmpty(outputPathName)) { if (null != zipCallback) { zipCallback.OnFinished(false); } return(false); } var zipOutputStream = new ZipOutputStream(File.Create(outputPathName)); zipOutputStream.SetLevel(6); // 压缩质量和压缩速度的平衡点; if (!string.IsNullOrEmpty(password)) { zipOutputStream.Password = password; } for (var index = 0; index < fileOrDirectoryArray.Length; ++index) { var result = false; var fileOrDirectory = fileOrDirectoryArray[index]; if (Directory.Exists(fileOrDirectory)) { result = ZipDirectory(fileOrDirectory, string.Empty, zipOutputStream, zipCallback); } else if (File.Exists(fileOrDirectory)) { result = ZipFile(fileOrDirectory, string.Empty, zipOutputStream, zipCallback); } if (!result) { if (null != zipCallback) { zipCallback.OnFinished(false); } return(false); } } zipOutputStream.Finish(); zipOutputStream.Close(); if (null != zipCallback) { zipCallback.OnFinished(true); } return(true); }
//压缩文件和文件夹 public static bool Zip(string[] pFileOrDirArray, //需要压缩的文件和文件夹 string pZipFilePath, //输出的zip文件完整路径 string pPassword = null, //密码 ZipCallback pCB = null, //回调 int pZipLevel = 6) //压缩等级 { if (null == pFileOrDirArray || string.IsNullOrEmpty(pZipFilePath)) { pCB?.OnFinished(false); return(false); } var zipOutputStream = new ZipOutputStream(File.Create(pZipFilePath)); zipOutputStream.SetLevel(pZipLevel); // 6 压缩质量和压缩速度的平衡点 zipOutputStream.Password = pPassword; foreach (string fileOrDirectory in pFileOrDirArray) { var result = false; if (Directory.Exists(fileOrDirectory)) { result = ZipDirectory(fileOrDirectory, string.Empty, zipOutputStream, pCB); } else if (File.Exists(fileOrDirectory)) { result = ZipFile(fileOrDirectory, string.Empty, zipOutputStream, pCB); } if (!result) { GC.Collect(); pCB?.OnFinished(false); return(false); } } zipOutputStream.Finish(); zipOutputStream.Close(); zipOutputStream = null; GC.Collect(); pCB?.OnFinished(true); return(true); }