这里用两种方法实现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#压缩和解压文件的资料请关注代码网其它相关文章!
发表评论