Ionic.Zip 提取文件并忽略密码
Posted
技术标签:
【中文标题】Ionic.Zip 提取文件并忽略密码【英文标题】:Ionic.Zip extract files and ignore password 【发布时间】:2012-02-17 10:06:19 【问题描述】:我在我的 Pocket-PC 项目中使用 Ionic.Zip(Compact Framework 版本)。 提取压缩文件(使用 Ionic.Zip)工作正常。如果我将密码放在压缩文件上,则在提取之前需要密码,但是当我尝试此实例时,提取密码验证失败。
示例:此文件夹即将压缩。
\MyDevice\My Documents\My Pictures
此文件夹包含两个文件('Flower.jpg','Waterfall.jpg')
使用此代码压缩文件:
public string Compress(string[] Paths, string SaveFileName, string Password, string CompressionType)
try
using (ZipFile zip = new ZipFile())
if (string.IsNullOrEmpty(Password))
zip.Password = Password;
zip.CompressionLevel = Utility.GetCompressionLevel(CompressionType);
foreach (string item in Paths)
if (Utility.IsDirectory(item))
zip.AddDirectory(item);
else if (Utility.IsFile(item))
zip.AddFile(item);
if (!SaveFileName.Trim().ToLower().EndsWith(".zip"))
if (SaveFileName.Trim().EndsWith("."))
SaveFileName += "zip";
else
SaveFileName += ".zip";
zip.Save(SaveFileName);
return Utility.GetResourceString("ZipSuccess");
catch (Exception ex)
return ex.Message;
提取码:
public string Decompress(string ZipFilePath, string TargetPath, string Password, bool OverwriteExistingFiles)
try
using (ZipFile decompress = ZipFile.Read(ZipFilePath))
if (!string.IsNullOrEmpty(Password))
decompress.Password = Password;
foreach (ZipEntry e in decompress)
e.Extract(TargetPath, OverwriteExistingFiles ? ExtractExistingFileAction.OverwriteSilently : ExtractExistingFileAction.DoNotOverwrite);
return Utility.GetResourceString("ExtractSuccess");
catch (Exception ex)
return ex.Message;
在这个位置解压文件效果很好,因为它需要密码:
\MyDevice\My Documents\Personal
但是!当我在同一文件夹中提取文件时:
\MyDevice\My Documents\My Pictures
它无需密码即可提取文件。 我认为这是一个错误。我可以为此做些什么? 希望有人能回答。谢谢!
【问题讨论】:
你确定文件被解压了吗?您将它们提取到压缩文件的同一文件夹中。所以文件已经存在于这个文件夹中 是的,我还尝试在解压缩之前重命名文件,以确保正在解压缩文件。我还在foreach循环上放了断点,看看是否有收集到的文件要提取。 如果你认为这是一个错误,你应该在这里发布:dotnetzip.codeplex.com/workitem/list/basic 【参考方案1】:您的 Compress() 方法中存在错误。压缩文件时,从不设置 ZipFile 实例的 Password 属性。查看决定是否分配 zip.Password 属性的逻辑。
上面写着:
if (string.IsNullOrEmpty(Password))
zip.Password = Password;
如前所述,仅当 Password 参数为 null 或空字符串时,才会设置 zip.Password 属性。如果 Password 参数为非空字符串,则代码跳过 zip.Password 赋值语句。
Compress() 方法中的 if 语句缺少 not 运算符。它应该是:
if ( ! string.IsNullOrEmpty(Password))
zip.Password = Password
【讨论】:
这是我今年三月的项目。实际上,我仔细介绍了我的项目,没有显示错误。感谢上帝,我通过了!以上是关于Ionic.Zip 提取文件并忽略密码的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中使用 Ionic-zip 下载大文件时修复 zip 文件损坏错误