在 C# 代码中提取 7zip

Posted

技术标签:

【中文标题】在 C# 代码中提取 7zip【英文标题】:extract 7zip in C# code 【发布时间】:2011-11-03 12:00:38 【问题描述】:

我需要在 C# 中使用 7zip。没有控制台,只有 7zSharp.dll ? + 我在这里找到了一些数据

http://7zsharp.codeplex.com/releases/view/10305,

但我不知道如何使用它(-我可以创建 .bat(.cmd) 文件,但我需要通过 dll 文件) 确切地说:我需要使用密钥提取 .7z 文件)

【问题讨论】:

你试过DotNetZip了吗? dotnetzip.codeplex.com/workitem/14034 【参考方案1】:

下载standalone console version from 7zip.com 并将其添加到您的项目中。

您需要在项目中添加这 3 个文件:

    7za.exe 7za.dll 7zxa.dll

别忘了在它的首选项中说复制到输出目录。

提取档案:

public void ExtractFile(string sourceArchive, string destination)
    
        string zPath = "7za.exe"; //add to proj and set CopyToOuputDir
        try
        
            ProcessStartInfo pro = new ProcessStartInfo();
            pro.WindowStyle = ProcessWindowStyle.Hidden;
            pro.FileName = zPath;
            pro.Arguments = string.Format("x \"0\" -y -o\"1\"", sourceArchive, destination);
            Process x = Process.Start(pro);
            x.WaitForExit();
        
        catch (System.Exception Ex) 
            //handle error
        
    

创建存档:

public void CreateZip(string sourceName, string targetArchive)

    ProcessStartInfo p = new ProcessStartInfo();
    p.FileName = "7za.exe";
    p.Arguments = string.Format("a -tgzip \"0\" \"1\" -mx=9", targetArchive, sourceName);
    p.WindowStyle = ProcessWindowStyle.Hidden;
    Process x = Process.Start(p);
    x.WaitForExit();

【讨论】:

您好,如何在参数中包含密码以使用上述解决方案创建压缩和提取压缩? @hunterex 密码的参数是“-p”所以它是-pMySuperS3cr3tPassword 为了使 ProcessWindowStyle 工作,您还需要将 UseShellExecute 设置为 true 请注意Process 实现IDisposable,所以不要忘记将最后两行包装到using 语句中【参考方案2】:

7zip 的作者提供了LZMA SDK 和良好的文档,应该能够实现您想要的。 SDK 包含能够压缩/解压缩的 C# 代码。

另一种选择是使用 C# (.NET) Interface for 7-Zip Archive DLLs 之类的东西

更新: 另一位用户在这里提出了类似的问题:How do I create 7-Zip archives with .NET? 答案有几个我提供的相同链接,还有几个。

【讨论】:

请注意,.NET LZMA SDK 代码不提供流式压缩和解压缩,因此处理大文件而不将它们写入磁盘非常困难。主要功能基本上是这样的:void Code(Stream in, Stream out)。读取压缩文件并按照您需要编写一个 Stream 类来处理它,该类在写入时进行处理。像 new Decompressingwrapper(compressedInput) 和 `new CompressingWrapper(decompressedInput) 这样的包装流将使其在大多数情况下更容易使用.【参考方案3】:

这个库看起来不支持加密文件。没有方法将键作为参数。

【讨论】:

...以及如何使用密钥提取 .7z 文件? 不适用于此库...您可以只使用 System.Diagnostics 启动控制台进程,但看到您不想这样做...开始阅读 SDK :)跨度> 【参考方案4】:

7zSharp 库似乎不支持密码作为输入,只是一个 zip 文件。

该库仅调用 7zip 的 .exe,因此您可以下载源代码并对其进行更改以接受密码参数,然后将其传递给可执行文件。

【讨论】:

是的,那太好了,我刚刚解释了如何做到这一点。我不会为你写代码。

以上是关于在 C# 代码中提取 7zip的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中的 WinRAR、7Zip、Zip、Tar、Winzip 中检查文件是不是存在

7zip:在C#中,如何将不同目录下的多个同名文件添加到同一个zip文件中?

如何在 Windows 批处理文件中使用 7zip 从 ZIP 存档中提取最后一个目录?

如何使用 C# 中的代码进行颜色提取?

7zip打不开rar文件

使用 c# 托管代码提取 sql 字符串