2016-04-09 16 views
0

SharpCompress kütüphanesini kullanıyorum (sorun değil). Fermuarlarım korumasız veya şifre korumalıdır (hepsi aynı şifreyle). bu yüzden bu gibi kodlama ediyorum:dosya akışı istisnası (blok kullanarak nasıl kullanılır)

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 
} 

Her zaman bilinmeyen bir yükseltir 'geçersiz başlık: xxxxxxxx' ben dere başında olmadığını düşünüyorum çünkü MoveToNextEntry çağırmak için catch bloğuna alır her durum.

İstisnalar içinde 'File.OpenRead (file)' koyamıyorum çünkü kullanıyorum bloğu kullanıyorum. Eğer (yorumlarda önerildiği gibi) kullanırsam, bir nesne referansı ayarlamamış olurum (muhtemelen atma çağrılmıştır).

Bu dosya akışını sıfırlamanın ve imha edilmesini sağlamanın bir yolu var mı (hala kullanma bloğunu kullanırken). Yeniden aramanın tekrar açılmasının, kullanım bloğunun da biraz mutsuz olmasına neden olacağını bilmiyordum.

Teşekkürler.

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(); 
} 

cevap

1

aşağıdaki denediniz. Muhtemelen atma o zaman çağrıldı?
+0

Ben nesne başvurusu bir istisna değil set olsun: –

+1

Sadece SharpCompress 0.11.5 ile denedim ve işe yaradı. Cevabı denediğim kodla güncelliyorum. Şifre korumasının istisnasını ele almak için catch ifadesini de düzenledim. C# 6.0'da değilseniz, yönerge ne zaman atlayabilirsiniz. –

+0

Teşekkürler :) Sanırım sonra açıkları kaçırdım. –

İlgili konular