0

我正在使用 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
}

每当到达要调用的 catch 块时,它总是会引发一个晦涩的“无效标头:xxxxxxxx”异常,MoveToNextEntry因为我认为流不在开始处。

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

有没有办法重置这个文件流并仍然确保它被处理(同时仍然使用using块)。我不知道再次调用 open 是否会导致using块也有点不高兴。

谢谢。

4

1 回答 1

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();
}
于 2016-04-09T20:41:38.210 回答