当前位置: 代码网 > it编程>编程语言>C# > C#压缩和解压文件的两种方法

C#压缩和解压文件的两种方法

2024年09月07日 C# 我要评论
这里用两种方法实现c#压缩和解压文件1、使用system.io.compression名称空间下的相关类(需引用 system.io.compression.filesystem和system.io.

这里用两种方法实现c#压缩和解压文件

1、使用system.io.compression名称空间下的相关类(需引用 system.io.compression.filesystem和system.io.compression程序集)

 创建zip压缩文件

使用zipfile类createfromdirectory()方法来创建zip压缩文件。它有3种重载形式,这里说一下常用的两个

public static void createfromdirectory(
    string sourcedirectoryname,
    string destinationarchivefilename
 )

public static void createfromdirectory(
     string sourcedirectoryname,//sourcedirectoryname 要压缩的文件夹
     string destinationarchivefilename, //destinationarchivefilename 压缩后的文件名
     compressionlevel compressionlevel,//compressionlevel 压缩级别  fastest-最快 nocompression-不压缩 optimal-最好
     bool includebasedirectory //includebasedirectory 是否包含当前目录
 )

测试代码如下:

static void main(string[] args)
         {
             zipfile.createfromdirectory("d:\\test", "d:\\a.zip");
          }

在d盘创建一个test目录,里面放一张图片,

运行

结果如下:

static void main(string[] args)
         {           
             zipfile.createfromdirectory("d:\\test", "d:\\b.zip",compressionlevel.optimal,true);
         }

运行结果如下

解压zip压缩文件

使用 zipfile类的extracttodirectory()方法

public static void extracttodirectory(
    string sourcearchivefilename,  //压缩文件完整路径
     string destinationdirectoryname //指定解压文件夹
 )
static void main(string[] args)
         {          
             zipfile.extracttodirectory("d:\\a.zip", "d:\\");
        }

运行结果如下

这里需要注意的是,如果文件已存在,会引发一个ioexception

添加文件到现有zip压缩文件

 using (filestream fs = new filestream("d:\\a.zip", filemode.open))
             {
                 using (ziparchive archive = new ziparchive(fs, ziparchivemode.update))
                 {
                     archive.createentryfromfile("c:\\users\\zhaojia\\pictures\\1.jpg","1.jpg");                                      
                 }
             }

运行结果如下

创建gz压缩文件

使用gzipstream类来创建gz压缩文件

   static void main(string[] args)
          {
              string filepath = "d:\\test";    //要添加到压缩文件的目录
              string targetpath = "d:\\";      //压缩文件存放的目录         
  
              directoryinfo dirinfo = new directoryinfo(filepath);
  
              foreach (fileinfo fileinfo in dirinfo.getfiles())
              {
                 using (filestream fsorg = fileinfo.openread())
                 {
                     using (filestream fs = file.create(targetpath + fileinfo.name + ".gz"))
                     {
                         using (gzipstream compressionstream = new gzipstream(fs,
                             compressionmode.compress))
                         {
                             fsorg.copyto(compressionstream);
                         }
                     }
                 }
             }
         }

使用这个类来创建gz文件有几个缺陷

1、压缩文件里只能有一个文件

2、压缩后的文件名要带上压缩文件里文件的后缀名。如有一个图像文件为a.jpg,生成的gz压缩文件名为  a.jpg.gz

解压gz压缩文件

    string compressfilepath = "d:\\4172212144245982608.jpg.gz";//压缩文件名
  
              fileinfo fileinfo = new fileinfo(compressfilepath);
  
              using (filestream originalfilestream = fileinfo.openread())
              {
                  string currentfilename = fileinfo.fullname;
                  string newfilename = currentfilename.remove(currentfilename.length - fileinfo.extension.length);
  
                 using (filestream decompressedfilestream = file.create(newfilename))
                 {
                     using (gzipstream decompressionstream = new gzipstream(originalfilestream, compressionmode.decompress))
                     {
                         decompressionstream.copyto(decompressedfilestream);                   
                     }
                 }
             }

2、使用winrar

winrar提供了一个控制台版本的exe,我们可以调用这个exe来压缩和解压文件

winrar支持的格式比较多,包括rar、7z、ace、arj、bz2、cab、gz、iso、jar、lzh、tar、uue、xz、z、001

这个exe不依赖其它的库,这里我们直接拷到项目的运行目录下

rar.exe支持的命令参数非常多,这里不全部介绍。有兴趣的可以运行rar -?查看详细的命令说明

创建rar压缩文件

语法如下:rar.exe a "d:\test.rar" "d:\test"

  static void main(string[] args)
          {
              const string rartoolname = "rar.exe";        //rar命令行exe
              string compressionfilename = "d:\\test.rar"; //压缩后的文件名
              string sourcefoldername = "d:\\test";        //要压缩的文件夹
  
              process p = new process();
              processstartinfo startinfo = new processstartinfo();
              startinfo.filename = rartoolname;
             startinfo.createnowindow = false;
             startinfo.useshellexecute = false;
             startinfo.arguments = string.format("{0} {1} {2}","a",compressionfilename,sourcefoldername);
             p.startinfo = startinfo;
             p.start();
         }

运行结果如下

打开d盘,会看到test.rar

解压rar压缩文件

语法如下:rar.exe x "d:\test.rar" "d:\test"

 const string rartoolname = "rar.exe";        //rar命令行exe
             string compressionfilename = "d:\\test.rar"; //指定压缩文件名
             string sourcefoldername = "d:\\test";   //要解压到的文件夹
             process p = new process();
             processstartinfo startinfo = new processstartinfo();
             startinfo.filename = rartoolname;
             startinfo.createnowindow = false;
             startinfo.useshellexecute = false;
             startinfo.arguments = string.format("{0} {1} {2}","x",compressionfilename,sourcefoldername);
             p.startinfo = startinfo;
             p.start();

这里还有一个操作,就是可以把图片和rar压缩文件合并成一个文件

首先准备一个rar文件,一个图片文件

   static void main(string[] args)
         {
             string imagefilepath = "d:\\2.jpg";            //图片文件路径
             string rarfilepath = "d:\\test.rar";           //压缩文件路径
             string command = string.format("copy /b {0} + {1} = {0}",imagefilepath,rarfilepath);  //命令
 
             process p = new process();
             processstartinfo startinfo = new processstartinfo();
             startinfo.filename = "cmd.exe";
             startinfo.useshellexecute = false;    
             startinfo.createnowindow = false;
             startinfo.redirectstandardinput = true;
             startinfo.redirectstandardoutput = true;
             p.startinfo = startinfo;          
             p.start();
             p.standardinput.writeline(command + "&exit");
             p.standardinput.autoflush = true;      
             p.waitforexit();
             p.close();
             console.writeline("执行成功");
 }

执行完成后,会发现图片文件变大了

此时我们只要将文件后缀修改为.rar,就可以以压缩文件的方式打开该文件。修改为.jpg,可以正常打开图片。

以上就是c#压缩和解压文件的两种方法的详细内容,更多关于c#压缩和解压文件的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com