首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何解压所有的.Zip文件从文件夹使用C# 4.0,而不使用任何OpenSource动态链接库?

如何解压所有的.Zip文件从文件夹使用C# 4.0,而不使用任何OpenSource动态链接库?
EN

Stack Overflow用户
提问于 2013-04-17 14:15:54
回答 6查看 78.1K关注 0票数 24

我有一个包含.ZIP文件的文件夹。现在,我想使用C#,但不使用任何外部程序集或.Net Framework4.5,将ZIP文件解压缩到特定的文件夹。

我已经搜索过,但没有找到任何使用Framework4.0或更低版本解压*.zip文件的解决方案。

我尝试过GZipStream,但它只支持.gz而不支持.zip文件。

EN

回答 6

Stack Overflow用户

发布于 2013-04-17 14:19:04

下面是来自msdn的示例。System.IO.Compression.ZipFile就是为此而生的:

代码语言:javascript
复制
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及以上版本。

票数 34
EN

Stack Overflow用户

发布于 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)

代码(原封不动地取自本文,这样您就可以看到它有多简单了):

代码语言:javascript
复制
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()中找到。

票数 16
EN

Stack Overflow用户

发布于 2013-04-17 14:21:35

ZipPackage可能是一个开始的地方。它位于System.IO.Packaging内部,在.NET 4.0中提供

与上面提到的.NET 4.5方法的简单性相差甚远,但它看起来可以做您想做的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16052877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档