读取 zip 文件时出现文件流异常(如何使用 using 块)
file stream exception on reading zip file (how to use using block)
我正在使用 SharpCompress 库(这不是问题所在)。我的 zip 要么未受保护,要么受密码保护(都使用相同的密码)。所以我这样编码:
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 块调用 MoveToNextEntry
时,它总是会引发一个模糊的 'invalid header: xxxxxxxx' 异常,因为我认为流不在开始处。
我无法将 File.OpenRead(file)
放入异常中,因为我正在使用 using
块。如果我使用(如评论中所建议的)搜索,我会得到一个未设置的对象引用(可能已调用处置)。
有没有办法重置这个文件流并仍然确保它被处置(同时仍然使用 using
块)。我不知道再次调用 open 是否会导致 using
块也有点不高兴。
谢谢。
您是否尝试过以下方法:
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();
}
我正在使用 SharpCompress 库(这不是问题所在)。我的 zip 要么未受保护,要么受密码保护(都使用相同的密码)。所以我这样编码:
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 块调用 MoveToNextEntry
时,它总是会引发一个模糊的 'invalid header: xxxxxxxx' 异常,因为我认为流不在开始处。
我无法将 File.OpenRead(file)
放入异常中,因为我正在使用 using
块。如果我使用(如评论中所建议的)搜索,我会得到一个未设置的对象引用(可能已调用处置)。
有没有办法重置这个文件流并仍然确保它被处置(同时仍然使用 using
块)。我不知道再次调用 open 是否会导致 using
块也有点不高兴。
谢谢。
您是否尝试过以下方法:
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();
}