压缩/解压缩文件夹和文件
时间:2020-03-05 18:37:17 来源:igfitidea点击:
有谁知道在Cquickly中压缩或者解压缩文件和文件夹的好方法吗?处理大文件可能是必要的。
解决方案:
从.Net 1.1开始,唯一可用的方法是进入Java库。
在JClass库中使用Zip类使用C压缩文件和数据
不确定在最新版本中是否已更改。
我一直使用SharpZip库。
这是一个链接
我们可以使用Tom指出的第三方库,例如SharpZip。
另一种方法(无需第三方)是使用Windows Shell API。我们需要在Cproject中设置对Microsoft Shell控件和自动化COM库的引用。杰拉尔德·吉布森(Gerald Gibson)在以下方面举了一个例子:
http://geraldgibson.net/dnn/Home/CZipFileCompression/tabid/148/Default.aspx
Internet存档的死页副本
这在Java中非常容易做到,并且如上所述,我们可以从C#进入java.util.zip库。有关参考,请参见:
java.util.zip javadocs
样例代码
我前一段时间使用它来对文件夹结构进行深(递归)压缩,但是我不认为我曾经使用过解压缩。如果我有这么高的动力,我可能会拉出该代码并在以后编辑它。
.Net 2.0框架名称空间" System.IO.Compression"支持GZip和Deflate算法。这是两种压缩和解压缩字节流的方法,我们可以从文件对象中获取它们。我们可以使用以下方法将" GZipStream"替换为" DefaultStream",以使用该算法。但是,这仍然留下了处理使用不同算法压缩的文件的问题。
public static byte[] Compress(byte[] data) { MemoryStream output = new MemoryStream(); GZipStream gzip = new GZipStream(output, CompressionMode.Compress, true); gzip.Write(data, 0, data.Length); gzip.Close(); return output.ToArray(); } public static byte[] Decompress(byte[] data) { MemoryStream input = new MemoryStream(); input.Write(data, 0, data.Length); input.Position = 0; GZipStream gzip = new GZipStream(input, CompressionMode.Decompress, true); MemoryStream output = new MemoryStream(); byte[] buff = new byte[64]; int read = -1; read = gzip.Read(buff, 0, buff.Length); while (read > 0) { output.Write(buff, 0, read); read = gzip.Read(buff, 0, buff.Length); } gzip.Close(); return output.ToArray(); }