ASP.NET生成压缩文件(rar打包)1【转】

来源:互联网 发布:田士永 知乎 编辑:程序博客网 时间:2024/04/30 02:54
 // <summary>/// 生成压缩文件/// </summary>/// <param name="strZipPath">生成的zip文件的路径</param>/// <param name="strZipTopDirectoryPath">源文件的上级目录</param>/// <param name="intZipLevel">T压缩等级</param>/// <param name="strPassword">压缩包解压密码</param>/// <param name="filesOrDirectoriesPaths">源文件路径</param>/// <returns></returns>private bool Zip(string strZipPath, string strZipTopDirectoryPath, int intZipLevel, string strPassword, string[] filesOrDirectoriesPaths){try{List<string> AllFilesPath = new List<string>();if (filesOrDirectoriesPaths.Length > 0) // get all files path{for (int i = 0; i < filesOrDirectoriesPaths.Length; i++){if (File.Exists(filesOrDirectoriesPaths[i])){AllFilesPath.Add(filesOrDirectoriesPaths[i]);}else if (Directory.Exists(filesOrDirectoriesPaths[i])){GetDirectoryFiles(filesOrDirectoriesPaths[i], AllFilesPath);}}}if (AllFilesPath.Count > 0){ZipOutputStream zipOutputStream = new ZipOutputStream(File.Create(strZipPath));zipOutputStream.SetLevel(intZipLevel);zipOutputStream.Password = strPassword;for (int i = 0; i < AllFilesPath.Count; i++){string strFile = AllFilesPath[i].ToString();try{if (strFile.Substring(strFile.Length - 1) == "") //folder{string strFileName = strFile.Replace(strZipTopDirectoryPath, "");if (strFileName.StartsWith("")){strFileName = strFileName.Substring(1);}ZipEntry entry = new ZipEntry(strFileName);entry.DateTime = DateTime.Now;zipOutputStream.PutNextEntry(entry);}else //file{FileStream fs = File.OpenRead(strFile);byte[] buffer = new byte[fs.Length];fs.Read(buffer, 0, buffer.Length);string strFileName = strFile.Replace(strZipTopDirectoryPath, "");if (strFileName.StartsWith("")){strFileName = strFileName.Substring(0);}ZipEntry entry = new ZipEntry(strFileName);entry.DateTime = DateTime.Now;zipOutputStream.PutNextEntry(entry);zipOutputStream.Write(buffer, 0, buffer.Length);fs.Close();fs.Dispose();}}catch{continue;}}zipOutputStream.Finish();zipOutputStream.Close();return true;}else{return false;}}catch{return false;}}/// <summary>/// Gets the directory files./// </summary>/// <param name="strParentDirectoryPath">源文件路径</param>/// <param name="AllFilesPath">所有文件路径</param>private void GetDirectoryFiles(string strParentDirectoryPath, List<string> AllFilesPath){string[] files = Directory.GetFiles(strParentDirectoryPath);for (int i = 0; i < files.Length; i++){AllFilesPath.Add(files[i]);}string[] directorys = Directory.GetDirectories(strParentDirectoryPath);for (int i = 0; i < directorys.Length; i++){GetDirectoryFiles(directorys[i], AllFilesPath);}if (files.Length == 0 && directorys.Length == 0) //empty folder{AllFilesPath.Add(strParentDirectoryPath);}}调用string strZipPath = @"D:\ConsultSystem\mgr\user.zip";string strZipTopDirectoryPath = @"D:\ConsultSystem\mgr\";int intZipLevel = 6;string strPassword = "";string[] filesOrDirectoriesPaths = new string[] { @"D:\ConsultSystem\mgr\user.txt" };


0 0