使用DotNetZip在Zip文件上设置密码

27

我正在使用DotNetZip来压缩我的文件,但我需要在zip中设置密码。

我尝试过:

public void Zip(string path, string outputPath)
    {
        using (ZipFile zip = new ZipFile())
        {
            zip.AddDirectory(path);
            zip.Password = "password";
            zip.Save(outputPath);
        }
    }

但输出 zip 没有密码。

参数path有一个子文件夹,例如:path = c:\path\,并且在 path 中我有subfolder

错在哪里?


你想要压缩并加密哪个文件夹?假设路径为C:\ folder1 \ folder2 \ file1.txt。 - Amey Kamat
不,这个路径是一个文件夹,而且这个文件夹里面还有一个子文件夹。我想让DotNetZip压缩我的子文件夹和里面的文件。我已经做到了,但是密码不起作用。这是我第一次使用这个库。 - Jean Carlos
1个回答

42

只有在设置了Password属性之后添加的条目才会应用密码。要保护您正在添加的目录,只需在调用AddDirectory之前设置密码即可。

using (ZipFile zip = new ZipFile())
{
    zip.Password = "password";
    zip.AddDirectory(path);
    zip.Save(outputPath);
}

请注意,这是因为Zip文件中的密码是分配给Zip文件中的条目而不是Zip文件本身。这使您可以保护一部分Zip文件而另一部分不受保护:

using (ZipFile zip = new ZipFile())
{
    //this won't be password protected
    zip.AddDirectory(unprotectedPath);
    zip.Password = "password";
    //...but this will be password protected
    zip.AddDirectory(path);
    zip.Save(outputPath);
}

谢谢,解决方案很好。但是在加密时如何隐藏文件名呢? - Habip Oğuz
@HabipOğuz - 我认为你做不到。加密是应用于文件而不是 zip 容器本身。我所知道的唯一实现方法是双重加密,这样如果有人打开了 zip 归档文件,他们只能看到另一个 zip 文件。 - petelids
@petelids,嗯,非常感谢。那时候,我会像WinRar一样搜索一个购买的软件。 - Habip Oğuz
@HabipOğuz - 我相信7zip可以做到你想要的。 - petelids

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接