2013-12-11 8 views
5

.NET Framework 4.5では、クラスによるZIPファイルのサポートがSystem.IO.Compressionに追加されました。C#.NET 4.5を使ってZIPアーカイブからファイルを最初にファイルに解凍せずにメモリに読み込む方法は?

私は、sample.xmlファイルをルートに持つ.ZIPアーカイブを持っているとしましょう。このファイルをアーカイブからメモリストリームに直接読み込み、それをカスタム.NETオブジェクトに逆シリアル化したいと思います。これを行う最善の方法は何ですか?

答えて

10

ZipArchiveおよびXmlSerializer.Deserialize()のマニュアルページに準拠しています。

ZipArchiveEntryクラスにはOpen()メソッドがあり、ファイルにストリームを返します。

string zipPath = @"c:\example\start.zip"; 

using (ZipArchive archive = ZipFile.OpenRead(zipPath)) 
{ 
    var sample = archive.GetEntry("sample.xml"); 
    if (sample != null) 
    { 
     using (var zipEntryStream = sample.Open()) 
     {    
      XmlSerializer serializer = new XmlSerializer(typeof(SampleClass)); 

      SampleClass deserialized = 
       (SampleClass)serializer.Deserialize(zipEntryStream); 
     } 
    } 
} 

as documented on MSDN、つまり、あなたはZipFileクラスを使用するためには、.NETアセンブリSystem.IO.Compression.FileSystemへの参照を追加する必要があります。

+0

ZipFileクラスを取得するには、System.IO.Compression.FileSystemアセンブリへの参照を追加する必要があります。 – sammy34

+1

@サミーのおかげで、更新されました。 – CodeCaster