在工作中,RAR和ZIP是两种最常用的压缩文件格式,主要用于文件打包、压缩和传输。它们能显著减少文件体积、提高存储效率,并便于数据共享和备份。 文件压缩与存储优化:通过算法减小文件体积,节省磁盘空间或网络带宽。
数据传输与共享:加快文件上传/下载速度,降低传输失败风险。
文件加密与安全:通过密码保护敏感数据,防止未授权访问。
分卷压缩(大文件拆分):将大文件分割成多个小包,绕过存储或传输限制。
自解压文件(无需解压软件):生成自己的.exe应用程序,方便接收方直接运行解压。
1、调用Winrar.exe压缩工具创建rar或zip压缩文件;本方法借助于Winrar.exe工具压缩、解压RAR、ZIP文件;bool RetState = false;string SourceFileDir = "数据源目录";string SaveZipFilePath = "rar\zip文件路径";string SaveFileDir = "解压目录";
CompressRarOrZip(SourceFileDir, SaveZipFilePath, false, "123");public bool CompressRarOrZip(string SourceFilesPath, string RarSaveFilePath, bool IsCover, string PassWord){ string rarPath = Path.GetDirectoryName(RarSaveFilePath); if (!Directory.Exists(rarPath)) Directory.CreateDirectory(rarPath); Process Process1 = new Process(); Process1.StartInfo.FileName = "Winrar.exe"; Process1.StartInfo.CreateNoWindow = true; string cmd = ""; if (!string.IsNullOrEmpty(PassWord) && IsCover) cmd = string.Format(" a -ep1 -p{0} -o+ {1} {2} -r", PassWord, RarSaveFilePath, SourceFilesPath); else if (!string.IsNullOrEmpty(PassWord) && !IsCover) cmd = string.Format(" a -ep1 -p{0} -o- {1} {2} -r", PassWord, RarSaveFilePath, SourceFilesPath); else if (string.IsNullOrEmpty(PassWord) && IsCover) cmd = string.Format(" a -ep1 -o+ {0} {1} -r", RarSaveFilePath, SourceFilesPath); else cmd = string.Format(" a -ep1 -o- {0} {1} -r", RarSaveFilePath, SourceFilesPath); Process1.StartInfo.Arguments = cmd; Process1.Start(); Process1.WaitForExit(); if (Process1.ExitCode == 0) { Process1.Close(); return true; } else { Process1.Close(); return false; }}
DecompressRarOrZip(SaveFileDir, SaveZipFilePath, false, "123");public bool DecompressRarOrZip(string FileSaveDir, string RarFilePath, bool IsCover, string PassWord){ if (!Directory.Exists(FileSaveDir)) Directory.CreateDirectory(FileSaveDir); Process Process1 = new Process(); Process1.StartInfo.FileName = "Winrar.exe"; Process1.StartInfo.CreateNoWindow = true; string cmd = ""; if (!string.IsNullOrEmpty(PassWord) && IsCover) cmd = string.Format(" x -p{0} -o+ {1} {2} -y", PassWord, RarFilePath, FileSaveDir); else if (!string.IsNullOrEmpty(PassWord) && !IsCover) cmd = string.Format(" x -p{0} -o- {1} {2} -y", PassWord, RarFilePath, FileSaveDir); else if (IsCover) cmd = string.Format(" x -o+ {0} {1} -y", RarFilePath, FileSaveDir); else cmd = string.Format(" x -o- {0} {1} -y", RarFilePath, FileSaveDir); Process1.StartInfo.Arguments = cmd; Process1.Start(); Process1.WaitForExit(); if (Process1.ExitCode == 0) { Process1.Close(); return true; } else { Process1.Close(); return false; }}
2、使用三方类库ICSharpCode.SharpZipLib创建ZIP压缩文件:特点:不依赖于PC是否有Winrar.exe压缩工具,引用动态库DLL创建,请自行下载DLL引用文件:ICSharpCode.SharpZipLib.dll bool RetState = false;string SourceFileDir = "数据源目录";string SaveZipFilePath = "zip文件路径";string SaveFileDir = "解压目录";
CreateZipFile(SourceFileDir, SaveZipFilePath);
public bool CreateZipFile(string SourceFileDir, string SaveZipFilePath, bool IsShowDialog = false){ bool RetState = false; try { var len = SourceFileDir.Length; var strlen = SourceFileDir[len - 1]; if (SourceFileDir[SourceFileDir.Length - 1] != Path.DirectorySeparatorChar) { SourceFileDir += Path.DirectorySeparatorChar; } ZipOutputStream outstream = new ZipOutputStream(File.Create(SaveZipFilePath)); outstream.SetLevel(6);
if (IsShowDialog) { frm_CreateZipFile frm = new frm_CreateZipFile(SourceFileDir, outstream, SaveZipFilePath); frm.ShowDialog(); } else { zip(SourceFileDir, outstream, SourceFileDir); }
outstream.Finish(); outstream.Close(); RetState = true; } catch (Exception) { RetState = false; } return RetState;}
private bool zip(string strFile, ZipOutputStream outstream, string staticFile){ bool RetState = false; try { if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar) { strFile += Path.DirectorySeparatorChar; } Crc32 crc = new Crc32(); string[] filenames = Directory.GetFileSystemEntries(strFile); foreach (string file in filenames) { if (Directory.Exists(file)) { zip(file, outstream, staticFile); } else { FileStream fs = File.OpenRead(file); byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); string tempfile = file.Substring(staticFile.LastIndexOf("\\") + 1); ZipEntry entry = new ZipEntry(tempfile); entry.DateTime = DateTime.Now; entry.Size = fs.Length; fs.Close(); crc.Reset(); crc.Update(buffer); entry.Crc = crc.Value; outstream.PutNextEntry(entry); outstream.Write(buffer, 0, buffer.Length); } } RetState = true; } catch (Exception) { RetState = false; } return RetState;}
UnZipFile(SaveZipFilePath, SaveFileDir);public bool UnZipFile(string ZipFilePath, string SaveFileDir){ bool RetState = false; try { if (!File.Exists(ZipFilePath)) return false; ZipInputStream inputstream = new ZipInputStream(File.OpenRead(ZipFilePath.Trim())); ZipEntry entry; string path = SaveFileDir; string rootDir = ""; while ((entry = inputstream.GetNextEntry()) != null) { rootDir = Path.GetDirectoryName(entry.Name); if (rootDir.IndexOf("\\") >= 0) { rootDir = rootDir.Substring(0, rootDir.IndexOf("\\") + 1); } string dir = Path.GetDirectoryName(entry.Name); string fileName = Path.GetFileName(entry.Name); if (dir != "") { if (!Directory.Exists(SaveFileDir + "\\" + dir)) { path = SaveFileDir + "\\" + dir; Directory.CreateDirectory(path); } } else if (dir == "" && fileName != "") { path = SaveFileDir; } else if (dir != "" && fileName != "") { if (dir.IndexOf("\\") > 0) { path = SaveFileDir + "\\" + dir; } } if (dir == rootDir) { path = SaveFileDir + "\\" + rootDir; }
if (fileName != String.Empty) { FileStream fs = File.Create(path + "\\" + fileName); int size = 2048; byte[] data = new byte[2048]; while (true) { size = inputstream.Read(data, 0, data.Length); if (size > 0) { fs.Write(data, 0, size); } else { break; } } fs.Close(); } } inputstream.Close(); RetState = true; } catch (Exception) { RetState = false; } return RetState;}
阅读原文:原文链接
该文章在 2025/7/21 15:18:21 编辑过