我有一个包含.ZIP文件的文件夹。现在,我想使用C#,但不使用任何外部程序集或.Net Framework4.5,将ZIP文件解压缩到特定的文件夹。
我已经搜索过,但没有找到任何使用Framework4.0或更低版本解压*.zip文件的解决方案。
我尝试过GZipStream,但它只支持.gz而不支持.zip文件。
发布于 2013-04-17 14:19:04
下面是来自msdn的示例。System.IO.Compression.ZipFile
就是为此而生的:
using System;
using System.IO;
using System.IO.Compression;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
string startPath = @"c:\example\start";
string zipPath = @"c:\example\result.zip";
string extractPath = @"c:\example\extract";
ZipFile.CreateFromDirectory(startPath, zipPath);
ZipFile.ExtractToDirectory(zipPath, extractPath);
}
}
}
编辑:抱歉,我错过了你对.NET 4.0及更低版本的兴趣。需要.NET Framework4.5及以上版本。
发布于 2014-11-03 22:07:25
我也有同样的问题,我找到了一篇很好很简单的文章来解决这个问题。http://www.fluxbytes.com/csharp/unzipping-files-using-shell32-in-c/
您需要引用名为Microsoft Shell Controls And Automation的COM库(Interop.Shell32.dll)
代码(原封不动地取自本文,这样您就可以看到它有多简单了):
public static void UnZip(string zipFile, string folderPath)
{
if (!File.Exists(zipFile))
throw new FileNotFoundException();
if (!Directory.Exists(folderPath))
Directory.CreateDirectory(folderPath);
Shell32.Shell objShell = new Shell32.Shell();
Shell32.Folder destinationFolder = objShell.NameSpace(folderPath);
Shell32.Folder sourceFile = objShell.NameSpace(zipFile);
foreach (var file in sourceFile.Items())
{
destinationFolder.CopyHere(file, 4 | 16);
}
}
强烈推荐阅读这篇文章-他带来了对旗帜4|16的解释
编辑:在我的应用程序运行了几年之后,我收到了两个用户的抱怨,说这个应用程序突然停止工作。似乎是CopyHere函数创建了临时文件/文件夹,但这些文件/文件夹从未被删除,这导致了问题。这些文件的位置可以在System.IO.Path.GetTempPath()中找到。
发布于 2013-04-17 14:21:35
ZipPackage可能是一个开始的地方。它位于System.IO.Packaging内部,在.NET 4.0中提供
与上面提到的.NET 4.5方法的简单性相差甚远,但它看起来可以做您想做的事情。
https://stackoverflow.com/questions/16052877
复制相似问题