zip文件似乎在我的驱动器上成功创建,并包含我在filePaths[]
问题在于,尽管设置密码为'hello',但当我尝试解压缩文件时,它会说密码不正确。
/// <summary>
/// Creates a zip file
/// </summary>
/// <param name="filePaths">An array of files to add to the zip file</param>
/// <param name="password">Password of zip file. Set to null to ignore</param>
/// <param name="outputName">The name of the outputted zip file (including full path) </param>
/// <returns></returns>
public string CreateZip(string[] filePaths, string password, string outputName)
{
outputName += ".zip";
using (var file = ZipFile.Create(outputName))
{
file.BeginUpdate();
filePaths.ToList().ForEach(x =>
{
if (Path.HasExtension(x))
{
file.Add(x);
}
else if (!Path.HasExtension(x) && Directory.Exists(x))
{
Directory.GetFiles(x, "*.*", SearchOption.AllDirectories).ToList().ForEach(file.Add);
}
});
file.Password = password;
file.CommitUpdate();
file.Close();
}
return outputName;
}
有趣的是,只有当zip文件中的文件大小为0字节(它是一个空的xml文件)时,才会出现此问题。
如果我将内容添加到.xml文件并尝试使用我的函数对其进行压缩,则尽管在代码中指定了密码,但它根本不会要求输入密码。 (更有意思的是它在重置我的电脑后问我密码,并且它工作正常,但随后删除了所有文件并再次尝试解压缩时不要求密码)
答案 0 :(得分:3)
我测试了您的代码并重现了该问题。在提交之前将 UseZip64 设置为开启为我做了诀窍:
file.Password = password;
file.UseZip64 = UseZip64.On;
file.CommitUpdate();
file.Close();
当它为动态或关闭时,它会对空文件产生相同的错误。