读取zip文件时的文件流异常(如何使用块)

时间:2016-04-09 20:36:56

标签: c# sharpcompress

我正在使用SharpCompress库(这不是问题)。我的拉链要么不受保护,要么受密码保护(所有密码都使用相同的密码)。所以我这样编码:

using(Stream stream = File.OpenRead(file))
{
    try {
        reader = ZipReader.Open(stream);
        moreFiles = reader.MoveToNextEntry();
    } catch (Exception e) {
        reader = ZipReader.Open(stream, pwd);
        moreFiles = reader.MoveToNextEntry();
    }
    //rest of code
}

它总是会引发一个模糊的无效标题:xxxxxxxx'每当它到达catch块以调用MoveToNextEntry时都会出现异常,因为我认为该流不是在开始时。

我无法在异常中添加File.OpenRead(file),因为我使用了using块。如果我使用(如评论中所建议的)搜索,我得到一个未设置的对象引用(可能是已经调用了dispose)。

有没有办法重置此文件流并仍然确保它被处置(仍然使用using块)。我不知道再次打开电话是否会导致using块有点不高兴。

感谢。

1 个答案:

答案 0 :(得分:1)

您是否尝试过以下操作:

try
{
    reader = ZipReader.Open(stream);
    moreFiles = reader.MoveToNextEntry();
}
catch (CryptographicException e) when (e.Message == "No password supplied for encrypted zip.")
{
    stream.Seek(0, SeekOrigin.Begin);
    reader = ZipReader.Open(stream, pwd);
    moreFiles = reader.MoveToNextEntry();
}