【发布时间】:2023-03-23 18:04:02
【问题描述】:
我需要在 C# 中使用 7zip。没有控制台,只有 7zSharp.dll ? + 我在这里找到了一些数据
http://7zsharp.codeplex.com/releases/view/10305,
但我不知道如何使用它(-我可以创建 .bat(.cmd) 文件,但我需要通过 dll 文件) 确切地说:我需要使用密钥提取 .7z 文件)
【问题讨论】:
我需要在 C# 中使用 7zip。没有控制台,只有 7zSharp.dll ? + 我在这里找到了一些数据
http://7zsharp.codeplex.com/releases/view/10305,
但我不知道如何使用它(-我可以创建 .bat(.cmd) 文件,但我需要通过 dll 文件) 确切地说:我需要使用密钥提取 .7z 文件)
【问题讨论】:
下载standalone console version from 7zip.com 并将其添加到您的项目中。
您需要在项目中添加这 3 个文件:
别忘了在它的首选项中说复制到输出目录。
提取档案:
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();
}
【讨论】:
Process 实现IDisposable,所以不要忘记将最后两行包装到using 语句中
7zip 的作者提供了LZMA SDK 和良好的文档,应该能够实现您想要的。 SDK 包含能够压缩/解压缩的 C# 代码。
另一种选择是使用 C# (.NET) Interface for 7-Zip Archive DLLs 之类的东西
更新: 另一位用户在这里提出了类似的问题:How do I create 7-Zip archives with .NET? 答案有几个我提供的相同链接,还有几个。
【讨论】:
void Code(Stream in, Stream out)。读取压缩文件并按照您需要编写一个 Stream 类来处理它,该类在写入时进行处理。像 new Decompressingwrapper(compressedInput) 和 `new CompressingWrapper(decompressedInput) 这样的包装流将使其在大多数情况下更容易使用.
这个库看起来不支持加密文件。没有方法将键作为参数。
【讨论】:
7zSharp 库似乎不支持密码作为输入,只是一个 zip 文件。
该库仅调用 7zip 的 .exe,因此您可以下载源代码并对其进行更改以接受密码参数,然后将其传递给可执行文件。
【讨论】: