我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何在C#中压缩和解压rar、zip文件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何在C#中压缩和解压rar、zip文件

这期内容当中小编将会给大家带来有关如何在C#中压缩和解压rar、zip文件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

在C#.NET中压缩解压rar文件

rar格式是一种具有专利文件的压缩格式,是一种商业压缩格式,不开源,对解码算法是公开的,但压缩算法是私有的,需要付费,如果需要在您的商业软件中使用rar格式进行解压缩,那么你需要为rar付费,rar在国内很流行是由于盗版的存在,正因为算法是不开源的,所以我们压缩rar并没有第三方的开源库可供选择,只能另寻出路。

针对rar的解压缩,我们通常使用winrar,几乎每台机器都安装了winrar,对于普通用户来说它提供基于用户界面的解压缩方式,另外,它也提供基于命令行的解压缩方式,这为我们在程序中解压缩rar格式提供了一个入口,我们可以在C#程序中调用rar的命令行程序实现解压缩,思路是这样的:

判断注册表确认用户机器是否安装winrar程序,如果安装取回winrar安装目录。

创建一个命令行执行进程。

通过winrar的命令行参数实现解压缩。

首先我们通过下面的代码判断用户计算机是否安装了winrar压缩工具:

如果已经安装winrar可通过如下代码返回winrar的安装位置,未安装则返回空字符串,最后并关闭注册表:

public static string ExistsWinRar(){    string result = string.Empty;    string key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe";    RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(key);    if (registryKey != null)    {        result = registryKey.GetValue("").ToString();    }    registryKey.Close();    return result;}
/// <summary>/// 将格式为rar的压缩文件解压到指定的目录/// </summary>/// <param name="rarFileName">要解压rar文件的路径</param>/// <param name="saveDir">解压后要保存到的目录</param>public static void DeCompressRar(string rarFileName, string saveDir){    string regKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe";    RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(regKey);    string winrarPath = registryKey.GetValue("").ToString();    registryKey.Close();    string winrarDir = System.IO.Path.GetDirectoryName(winrarPath);    String commandOptions = string.Format("x {0} {1} -y", rarFileName, saveDir);    ProcessStartInfo processStartInfo = new ProcessStartInfo();    processStartInfo.FileName = System.IO.Path.Combine(winrarDir, "rar.exe");    processStartInfo.Arguments = commandOptions;    processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;    Process process = new Process();    process.StartInfo = processStartInfo;    process.Start();    process.WaitForExit();    process.Close();}
/// <summary>/// 将目录和文件压缩为rar格式并保存到指定的目录/// </summary>/// <param name="soruceDir">要压缩的文件夹目录</param>/// <param name="rarFileName">压缩后的rar保存路径</param>public static void CompressRar(string soruceDir, string rarFileName){    string regKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe";    RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(regKey);    string winrarPath = registryKey.GetValue("").ToString();    registryKey.Close();    string winrarDir = System.IO.Path.GetDirectoryName(winrarPath);    String commandOptions = string.Format("a {0} {1} -r", rarFileName, soruceDir);    ProcessStartInfo processStartInfo = new ProcessStartInfo();    processStartInfo.FileName = System.IO.Path.Combine(winrarDir, "rar.exe");    processStartInfo.Arguments = commandOptions;    processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;    Process process = new Process();    process.StartInfo = processStartInfo;    process.Start();    process.WaitForExit();    process.Close();}

在C#.NET中压缩解压zip文件

zip是一种免费开源的压缩格式,windows平台自带zip压缩和解压工具,由于算法是开源的,所以基于zip的解压缩开源库也很多,SharpZipLib是一个很不错的C#库,它能够解压缩zip、gzip和tar格式的文件,首先下载SharpZipLib解压后,在您的项目中引用ICSharpCode.SharpZLib.dll程序集即可,下面是一些关于SharpZipLib压缩和解压的示例。

ZipOutputStream zipOutStream = new ZipOutputStream(File.Create("my.zip"));CreateFileZipEntry(zipOutStream, "file1.txt", "file1.txt");CreateFileZipEntry(zipOutStream, @"folder1\folder2\folder3\file2.txt", "file2.txt");zipOutStream.Close();
Directory.CreateDirectory("ZipOutPut"); ZipInputStream zipInputStream = new ZipInputStream(File.Open("my.zip", FileMode.Open)); ZipEntry zipEntryFromZippedFile = zipInputStream.GetNextEntry(); while (zipEntryFromZippedFile != null) {     if (zipEntryFromZippedFile.IsFile)     {         FileInfo fInfo = new FileInfo(string.Format("ZipOutPut\\{0}", zipEntryFromZippedFile.Name));         if (!fInfo.Directory.Exists) fInfo.Directory.Create();         FileStream file = fInfo.Create();         byte[] bufferFromZip = new byte[zipInputStream.Length];         zipInputStream.Read(bufferFromZip, 0, bufferFromZip.Length);         file.Write(bufferFromZip, 0, bufferFromZip.Length);         file.Close();     }     zipEntryFromZippedFile = zipInputStream.GetNextEntry(); } zipInputStream.Close();

使用.NET中自带的类解压缩zip文件

微软在System.IO.Compression命名空间有一些关于文件解压缩的类,如果只是希望压缩解压zip和gzip格式的文件,是个不错的选择,在NET Framework 4.5框架中,原生System.IO.Compression.FileSystem.dll程序集中新增了一个名为ZipFile的类,,让压缩和解压zip文件变得更简单,ZipFile的使用示例如下:

System.IO.Compression.ZipFile.CreateFromDirectory(@"e:\test", @"e:\test\test.zip"); //压缩
System.IO.Compression.ZipFile.ExtractToDirectory(@"e:\test\test.zip", @"e:\test"); //解压

支持格式最多的C#解压缩开源库

当您还苦苦在为上面的各种压缩格式发愁的时候,一个名为SharpCompress的C#框架被开源,您可以在搜索引擎中找到SharpCompress框架的开源代码,它支持:rar 7zip, zip, tar, tzip和bzip2格式的压缩和解压,下面的示例直接从rar格式文件读取并解压文件。

using (Stream stream = File.OpenRead(@"C:\Code\sharpcompress.rar")){    var reader = ReaderFactory.Open(stream);    while (reader.MoveToNextEntry())    {        if (!reader.Entry.IsDirectory)        {            Console.WriteLine(reader.Entry.FilePath);            reader.WriteEntryToDirectory(@"C:\temp");        }    }}

总结

关于rar和zip格式相比,rar的压缩率比zip要高,而且支持分卷压缩,但rar是商业软件,需要付费,zip压缩率不如rar那么高,但开源免费,7zip格式开源免费,压缩率较为满意,这些压缩格式各有优势,就微软平台和一些开源平台来说,一般采用的都是zip格式,因为它更容易通过编程的方式实现,比rar更加可靠。

/// <summary>/// 解压RAR和ZIP文件(需存在Winrar.exe(只要自己电脑上可以解压或压缩文件就存在Winrar.exe))/// </summary>/// <param name="UnPath">解压后文件保存目录</param>/// <param name="rarPathName">待解压文件存放绝对路径(包括文件名称)</param>/// <param name="IsCover">所解压的文件是否会覆盖已存在的文件(如果不覆盖,所解压出的文件和已存在的相同名称文件不会共同存在,只保留原已存在文件)</param>/// <param name="PassWord">解压密码(如果不需要密码则为空)</param>/// <returns>true(解压成功);false(解压失败)</returns>public static bool UnRarOrZip( string UnPath, string rarPathName, bool IsCover, string PassWord){     if (!Directory.Exists(UnPath))         Directory.CreateDirectory(UnPath);     Process Process1 = new Process();     Process1.StartInfo.FileName = "Winrar.exe" ;     Process1.StartInfo.CreateNoWindow = true ;     string cmd = "" ;     if (! string .IsNullOrEmpty(PassWord) && IsCover)         //解压加密文件且覆盖已存在文件( -p密码 )         cmd = string .Format( " x -p{0} -o+ {1} {2} -y" , PassWord, rarPathName, UnPath);     else if (! string .IsNullOrEmpty(PassWord) && !IsCover)         //解压加密文件且不覆盖已存在文件( -p密码 )         cmd = string .Format( " x -p{0} -o- {1} {2} -y" , PassWord, rarPathName, UnPath);     else if (IsCover)         //覆盖命令( x -o+ 代表覆盖已存在的文件)         cmd = string .Format( " x -o+ {0} {1} -y" , rarPathName,UnPath);     else         //不覆盖命令( x -o- 代表不覆盖已存在的文件)         cmd = string .Format( " x -o- {0} {1} -y" , rarPathName, UnPath);     //命令     Process1.StartInfo.Arguments = cmd;     Process1.Start();     Process1.WaitForExit(); //无限期等待进程 winrar.exe 退出     //Process1.ExitCode==0指正常执行,Process1.ExitCode==1则指不正常执行     if (Process1.ExitCode == 0)     {         Process1.Close();         return true ;     }     else     {         Process1.Close();         return false ;     } } /// <summary>/// 压缩文件成RAR或ZIP文件(需存在Winrar.exe(只要自己电脑上可以解压或压缩文件就存在Winrar.exe))/// </summary>/// <param name="filesPath">将要压缩的文件夹或文件的绝对路径</param>/// <param name="rarPathName">压缩后的压缩文件保存绝对路径(包括文件名称)</param>/// <param name="IsCover">所压缩文件是否会覆盖已有的压缩文件(如果不覆盖,所压缩文件和已存在的相同名称的压缩文件不会共同存在,只保留原已存在压缩文件)</param>/// <param name="PassWord">压缩密码(如果不需要密码则为空)</param>/// <returns>true(压缩成功);false(压缩失败)</returns>public static bool CondenseRarOrZip( string filesPath, string rarPathName, bool IsCover, string PassWord){     string rarPath = Path.GetDirectoryName(rarPathName);     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)         //压缩加密文件且覆盖已存在压缩文件( -p密码 -o+覆盖 )         cmd = string .Format( " a -ep1 -p{0} -o+ {1} {2} -r" , PassWord, rarPathName, filesPath);     else if (! string .IsNullOrEmpty(PassWord) && !IsCover)         //压缩加密文件且不覆盖已存在压缩文件( -p密码 -o-不覆盖 )         cmd = string .Format( " a -ep1 -p{0} -o- {1} {2} -r" , PassWord, rarPathName, filesPath);     else if ( string .IsNullOrEmpty(PassWord) && IsCover)         //压缩且覆盖已存在压缩文件( -o+覆盖 )         cmd = string .Format( " a -ep1 -o+ {0} {1} -r" , rarPathName, filesPath);     else         //压缩且不覆盖已存在压缩文件( -o-不覆盖 )         cmd = string .Format( " a -ep1 -o- {0} {1} -r" , rarPathName, filesPath);     //命令     Process1.StartInfo.Arguments = cmd;     Process1.Start();     Process1.WaitForExit(); //无限期等待进程 winrar.exe 退出     //Process1.ExitCode==0指正常执行,Process1.ExitCode==1则指不正常执行     if (Process1.ExitCode == 0)     {         Process1.Close();         return true ;     }     else     {         Process1.Close();         return false ;     } }

上述就是小编为大家分享的如何在C#中压缩和解压rar、zip文件了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何在C#中压缩和解压rar、zip文件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何在C#中压缩和解压rar、zip文件

这期内容当中小编将会给大家带来有关如何在C#中压缩和解压rar、zip文件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在C#.NET中压缩解压rar文件rar格式是一种具有专利文件的压缩格式,是一种商业
2023-06-15

Java如何实现文件压缩为zip和解压zip压缩包

本篇内容介绍了“Java如何实现文件压缩为zip和解压zip压缩包”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!压缩成.zip代码如下:/*
2023-07-02

Ubuntu压缩和解压缩RAR文件的方法

本篇内容主要讲解“Ubuntu压缩和解压缩RAR文件的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ubuntu压缩和解压缩RAR文件的方法”吧!方法很简单,一条命令就搞定了:sudo ap
2023-06-13

linux下如何压缩好解压.rar文件

这篇文章将为大家详细讲解有关linux下如何压缩好解压.rar文件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一,解压问题在网上下东西的时候,经常会遇到.rar后缀的文件,我用tar解压,
2023-06-05

如何在Linux中zip压缩文件和文件夹

这期内容当中小编将会给大家带来有关如何在Linux中zip压缩文件和文件夹,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。zip 是***的归档文件格式之一。使用 zip,你可以将多个文件压缩到一个文件中。
2023-06-16

go怎么压缩和解压zip文件

本篇内容主要讲解“go怎么压缩和解压zip文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go怎么压缩和解压zip文件”吧!压缩zipfunc Zip(dest string, paths .
2023-07-02

如何在Java中利用zip实现压缩和解压缩

这篇文章主要介绍了如何在Java中利用zip实现压缩和解压缩,编程网小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随编程网小编来看看吧!Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和
2023-06-06

Win10如何使用自带压缩、解压zip压缩文件功能

Windows系统自带不少工具,到了Win10,好用的功能依然保留,比如压缩/解压zip压缩文件的功能。压缩文件能为系统节省空间,这一功能必不可少。Win10如何使用压缩/解压zip压缩文件功能?Win10压缩zip功能Windows10自
2023-06-10

怎样在Linux中压缩和解压缩文件

这期内容当中小编将会给大家带来有关怎样在Linux中压缩和解压缩文件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。当在备份重要文件和通过网络发送大文件的时候,对文件进行压缩非常有用。请注意,压缩一个已经压
2023-06-16

里有Java如何实现压缩与解压zip文件

里有Java如何实现压缩与解压zip文件?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java解压缩zip - 多个文件(包括文件夹),对多个文件和文件夹进行压
2023-05-31

ubuntu如何解压rar文件

要在Ubuntu上解压RAR文件,您需要安装一个RAR解压工具。您可以使用以下命令来安装RAR解压工具:```sudo apt-get install unrar```安装完成后,您可以使用以下命令来解压RAR文件:```unrar x 文
2023-08-29

如何在Linux中使用Gzip压缩和解压文件

这篇文章主要介绍“如何在Linux中使用Gzip压缩和解压文件”,在日常操作中,相信很多人在如何在Linux中使用Gzip压缩和解压文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何在Linux中使用Gz
2023-06-13

如何在Python中处理文件压缩和解压缩的问题

如何在Python中处理文件压缩和解压缩的问题简介:在日常开发和工作中,我们经常会遇到需要处理文件压缩和解压缩的问题。Python提供了一些强大的库,使得我们可以轻松地处理文件的压缩和解压缩操作。本文将介绍Python中常用的文件压缩和解压
2023-10-22

Android如何实现压缩和解压缩文件

废话不多说了,直接给大家贴java代码了,具体代码如下所示: Java代码 package com.maidong.utils; import java.io.BufferedInputStream; import java.io.Bu
2022-06-06

windows中winrar压缩文件如何解压

这篇“windows中winrar压缩文件如何解压”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“windows中winrar
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录