在工作中,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 编辑过