在 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文件中?