当前位置:编程学习 > C#/ASP.NET >>

C# 压缩多个文件

C#怎么压缩多个文件的,我想用GZipStream方法去压缩,我需要压缩的文件是放在不同的文件夹下面,我需要将他们压缩到一起,解压之后这些文件是在一个文件夹下面的,而不是之前的目录结构。我想问下怎么去压缩这些文件,求大神帮忙解答下!!!! GZipStream  --------------------编程问答-------------------- 求大神帮忙解答下,我有在网上看到很多人用SharpZip,不想用别人写的DLL --------------------编程问答-------------------- 唉~~有没有人能帮忙解答下 O(∩_∩)O谢谢 --------------------编程问答-------------------- --------------------编程问答-------------------- 取到要压缩的文件。转成流。然后压缩。逻辑不是很清楚么? --------------------编程问答--------------------
引用 4 楼 clark523 的回复:
取到要压缩的文件。转成流。然后压缩。逻辑不是很清楚么?

是很清楚,但是我写入之后的zip文件,打开只有一个没有后缀名的文件,能不能给个具体的。。。。。 --------------------编程问答-------------------- 刚换了公司,手边没有现成的示例代码。。
我估计是你压缩的时候对于流的处理有问题,是不是有截断流或则其他之类的。
最好进调试跟一下,对于每个文件生成的流,使用反向的方法看看能不能还原成一个文件,来进行排除 --------------------编程问答--------------------
引用 6 楼 clark523 的回复:
刚换了公司,手边没有现成的示例代码。。
我估计是你压缩的时候对于流的处理有问题,是不是有截断流或则其他之类的。
最好进调试跟一下,对于每个文件生成的流,使用反向的方法看看能不能还原成一个文件,来进行排除


public static void GZipCompress(string filename,FileInfo[] files)
{
   using(FileStream fsOut = new FileStream(filename,FileMode.Creat,FileAccess.Write))
   {
       FileStream infile;
       byte[] buffer;
       GZipStream destinationStream = null;
       string lpFolder = string.Empty;
       string lpSourceFile = string.Empty;
       foreach(FileInfo fi in files)
       {
         lpFolder = fi.DirectoryName+"\\";
         try
         {
            lpSourceFile = fi.FullName;
            infile = new FileStream(lpSourceFile,FileMode.Open,FileAccess.Read,FileShare.Read);
            buffer = new byte[infile.Length];
            int len;
            destinationStream = new GZipStream(fsOut,CompressionMode.Compress,true);
            while((len = infile.Read(buffer,0,buffer.Length)) > 0)
           {
                destinationStream.Write(buffer,0,len);
           }
           infile.Close();
           destinationStream.Flush();
           destinationStream.Close();
         }
         catch
         {
         }
       }
   }
}

上面是我的代码,不知道怎么回事?感觉老是缺点什么,上面代码运行后所读的文件里面的东西都会写入,但是我打开压缩后的zip档,就会看到里面只有一个文件,而且是没有后缀名的,里面文件的大小也是有的,说明我写的文件都写入到一个里面去了。唉~~不知道怎么改了。。


--------------------编程问答-------------------- --------------------编程问答-------------------- 把要压缩的文件copy到一个temp目录,然后压缩这个目录。winzip,winrar都这么干的。 --------------------编程问答-------------------- 你这个代码是单文件压缩的。
http://tech.ddvip.com/2009-02/1233813558107352.html
刚搜的别人的多文件压缩代码。
看看对你有没有帮助
--------------------编程问答-------------------- 能否具体点。。。。。 --------------------编程问答-------------------- 没写过你这些东西。。。
表示很尴尬 --------------------编程问答-------------------- http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx
Compressed GZipStream objects written to a file with an extension of .gz can be decompressed using many common compression tools; however, this class does not inherently provide functionality for adding files to or extracting files from zip archives. 
如果上面英文没理解错的话,他本来就是只支持单个文件

如果你想支持多个文件,但不兼容现在流行的软件,请参考
http://www.cnblogs.com/AndyHuang/archive/2009/02/05/1384388.html
--------------------编程问答--------------------
引用 13 楼 dahuatttt 的回复:
http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx
Compressed GZipStream objects written to a file with an extension of .gz can be decompressed using many common compression tools; however, this class does not inherently provide functionality for adding files to or extracting files from zip archives. 
如果上面英文没理解错的话,他本来就是只支持单个文件

如果你想支持多个文件,但不兼容现在流行的软件,请参考
http://www.cnblogs.com/AndyHuang/archive/2009/02/05/1384388.html

我把那个下下来试了下,貌似它压缩了,但是好像只能用代码去解压,不能用电脑上面的解压工具来解压来着。。。。。 --------------------编程问答-------------------- 我们老大说可以用系统自带的winzip的命令去做压缩与解压,但是我要压缩的文件是在不同文件夹下的,怎么用这个方法来将其压缩到一起,解压后在一个文件夹下面。。。。 --------------------编程问答-------------------- --------------------编程问答-------------------- GZipStream是不支持多个文件的压缩和解压缩的,想要处理多个文件,就必须自己去了解gzip的文件头,使用DeflateStream来操作,GZipStream和DeflateStream其实是类似的,唯一的不同之处是,GZipStream在DeflateStream的基础上添加了Gzip的文件头和文件尾,但是却没有在文件头里写入文件路径信息,因此压缩后就得不到完整的目录结构,而原文件名如果写入gzip的头部,则直接能用该信息,如果没写入,就自动用gz文件名作为解压后的文件名。
根据这个原理,你需要去查找gzip的头尾格式,参考:http://tools.ietf.org/html/rfc1952
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,