35

Microsoft 在 .NET 4.5 中引入了对 ZIP 文件处理的改进Microsoft 在System.IO.Compression。即ZipArchiveZipFile类。但是,我还没有看到使用本地 .NET ZIP 文件处理密码保护文件的方法。有没有办法做到这一点?(我知道有相当不错的 3rd 方 zip 文件库,这不是问题。)

4

7 回答 7

30

不幸的是没有。.Net Framework 4.5 不支持受密码保护的 zip 文件。在这种情况下,您必须切换到著名的 3rd 方库之一。

于 2012-10-31T14:57:35.260 回答
26

正如所指出的,DotNetZip是您的朋友。解压缩 zip 文件非常简单

using ( ZipFile archive = new ZipFile( @"c:\path\to\your\password\protected\archive.zip",) )
{
  archive.Password = "your-pass-word-here" ;
  archive.Encryption = EncryptionAlgorithm.PkzipWeak ; // the default: you might need to select the proper value here
  archive.StatusMessageTextWriter = Console.Out;

  archive.ExtractAll( @"c:\path\to\unzip\directory\", ExtractExistingFileAction.Throw ) ;
}

根据我的经验,DotNetZip 的运行速度与Info-Zip 的开源解压缩实用程序一样快,并且使用的内存量大致相同。


编辑注释: DotNetZip 曾经住在 Codeplex。Codeplex 已关闭。Codeplex仍然提供旧存档。看起来代码已经迁移到 Github:


于 2015-01-14T00:04:03.380 回答
6

离子方法很棒。我尝试了其他三种方法,这是迄今为止最好的。不要浪费时间,好好利用它。

https://dotnetzip.codeplex.com/wikipage?title=PS-Examples

支持密码加密和其他 zip 选项。

于 2015-01-13T23:39:43.743 回答
4

在查看4.5 框架提供的方法时,没有一种方法允许使用 zip 文件输入密码。正如您在问题中提到的,第 3 方将是您最好的选择。

于 2012-10-31T14:52:20.083 回答
4

本地 .net 4.5 库中似乎不支持受密码保护的 zip 文件,类似于 Windows 资源管理器中似乎不支持的方式,即使使用 Windows 10 也是如此!有些人报告说他们使用 3rd 方 DotNetLib 存在 zip 损坏问题,因此请确保您进行广泛测试,如果您确实走这条路或尝试使用SharpZipLib

于 2016-03-29T22:34:21.923 回答
0

我发现在 c# Install PM 中解压的方法非常简单
(如果有新版本,你可以找到!)

Install-Package Ionic.Zip -Version 1.9.1.8

代码 C#

string zipFile = @"C:\Users\Fesslersoft\Desktop\ZipTest\Test.zip";
string targetDirectory = @"C:\Users\Fesslersoft\Desktop\ZipTest\";
 
using (Ionic.Zip.ZipFile zip = Ionic.Zip.ZipFile.Read(zipFile))
{
    zip.Password = "1234";
    zip.ExtractAll(targetDirectory, Ionic.Zip.ExtractExistingFileAction.DoNotOverwrite);
}
 
Console.WriteLine("Zip file has been successfully extracted.");
Console.Read();

来源:https ://codesnippets.fesslersoft.de/extract-a-password-protected-zip-file-using-dotnetzip/

于 2020-11-03T15:25:28.103 回答
0

对于那些以 .Net Standard 2.0 为目标的用户,SharpZipLib 做得很好,可以将内存中受密码保护的 zip 文件优雅地提取到字节 []。

https://github.com/icsharpcode/SharpZipLib

在相同的情况下尝试了 Ionic,但可以使用 ZipInputStream 提取文件,这会生成损坏的提取字节数组。

于 2019-10-31T13:54:16.710 回答