如何使用C#4.0和不使用任何开放源代码的DLL从解压文件夹下所有的.zip文件?(How to U

2019-08-31 08:22发布

我有一个包含.ZIP文件的文件夹。 现在,我想解压缩ZIP文件到使用C#特定的文件夹,而无需使用任何外部组件或.NET Framework 4.5。

我已搜查,但没有发现使用拆包框架4.0或以下* .zip文件的任何解决方案。

我试过GZipStream,但它仅支持。广州,而不是.zip文件。

Answer 1:

这里是例如从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 framework 4.5及以上。



Answer 2:

我有同样的问题,发现解决问题的好和非常简单的文章。 http://www.fluxbytes.com/csharp/unzipping-files-using-shell32-in-c/

你需要参照名为微软壳牌控制和自动化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的explenation的物品─| 16

编辑:这几年之后我的应用程序,它利用这一点,已经运行了,我从所有的突然应用程序的停止工作两个用户有投诉。 看来该CopyHere函数创建临时文件/文件夹,这些都不会被删除造成的问题。 这些文件的位置可以在System.IO.Path.GetTempPath找到()。



Answer 3:

ZipPackage可能是一个起点。 这里面System.IO.Packaging程序 ,并在.NET 4.0中提供

没有任何接近上面提到的.NET 4.5方法简单,但它看起来像它可以做你想做的。



Answer 4:

.NET 3.5有这样的DeflateStream。 您必须在目录和这样的信息来创建结构,但PKWARE出版这一信息。 我已经写了一个解压缩工具,一旦你为它创建的结构不是特别繁重。



Answer 5:

我有同样的问题,并通过调用通过从C#代码CMD壳7-ZIP可执行的解决了这个问题,如下,

string zipped_path = "xxx.7z";
string unzipped_path = "yyy";
string arguments = "e " + zipped_path + " -o" + unzipped_path;

System.Diagnostics.Process process
         = Launch_in_Shell("C:\\Program Files (x86)\\7-Zip\\","7z.exe", arguments);

if (!(process.ExitCode == 0))
     throw new Exception("Unable to decompress file: " + zipped_path);

并在Launch_in_Shell(...)被定义为,

public static System.Diagnostics.Process Launch_in_Shell(string WorkingDirectory,
                                                         string FileName, 
                                                         string Arguments)
{
       System.Diagnostics.ProcessStartInfo processInfo 
                                         = new System.Diagnostics.ProcessStartInfo();

        processInfo.WorkingDirectory = WorkingDirectory;
        processInfo.FileName = FileName;
        processInfo.Arguments = Arguments;
        processInfo.UseShellExecute = true;
        System.Diagnostics.Process process 
                                      = System.Diagnostics.Process.Start(processInfo);

        return process;
}

缺点:您需要安装在你的机器7zip的,我只能用“.7z压缩”文件,试了一下。 希望这可以帮助。



Answer 6:

你可以使用DotNetZip (开源)`

string zipFilePath = "C:\\sample.zip";
string extractedFilePath = "C:\\sampleFolder";

ZipFile zipfile = ZipFile.Read(zipFilePath); 
if (!Directory.Exists(extractedFilePath))
    Directory.CreateDirectory(extractedFilePath); 

foreach (ZipEntry e in zipfile)
{
        e.Extract(extractedFilePath,ExtractExistingFileAction.OverwriteSilently);
}`


Answer 7:

在.NET 4.0中放气和gzip无法处理ZIP文件,但你可以使用shell功能解压文件。

public FolderItems Extract()
{
 var shell = new Shell();
 var sf = shell.NameSpace(_zipFile.Path);
 return sf.Items();
}

当提取函数被调用时,你可以保存返回folderItems

    FolderItems Fits = Extract();
    foreach( var s in Fits)
    {
       shell.Namespace("TargetFolder").copyhere(s); 

    }


文章来源: How to Unzip all .Zip file from Folder using C# 4.0 and without using any OpenSource Dll?
标签: c# unzip zipfile