2016-11-16 3 views
0

ZipArchiveを確認したいと思います。これを行うには、すべてのエントリーをMemoryStreamにコピーします。私は自分のエントリーを開いてコピーすることができるかどうかを知りたいだけです。Stream.CopyTo(Stream.Null)

public void ZipVerification(Stream stream) 
    { 
     using (var memoryStream = new MemoryStream()) 
     using (var zip = new ZipArchive(stream, ZipArchiveMode.Read)) 
     { 
      foreach (var entry in zip.Entries) 
      { 
       using (var entryStream = entry.Open()) 
       { 
        entryStream.CopyTo(memoryStream); 
       } 
      } 
     } 
    } 

しかし、この方法は私の記憶を消費します。 MemoryStreamの代わりにStream.Nullを使用する方が良いでしょうか?

public void ZipVerification(Stream stream) 
    { 
     using (var zip = new ZipArchive(stream, ZipArchiveMode.Read)) 
     { 
      foreach (var entry in zip.Entries) 
      { 
       using (var entryStream = entry.Open()) 
       { 
        entryStream.CopyTo(Stream.Null); 
       } 
      } 
     } 
    } 
+0

私はよく分かりません。 MSDNはStream.NullでのReadまたはWriteの呼び出しについてのみ説明し、Nullへのコピー中に何が起こるかについては何も示していません。 https://msdn.microsoft.com/en-us/library/system.io.stream.null(v=vs.110).aspx –

答えて

2

ヌルストリームへのコピーは機能し、わかったようにストリームからデータを保存するために余分なメモリを必要としません。

あなたはそれが実際にストリームを消費していますことを確認するために基本となるストリームのPositionを確認することができます。

public static void ZipVerification() 
{ 
    using (var zip = new ZipArchive(stream, ZipArchiveMode.Read)) 
    { 
     // Print stream position before. 
     Console.WriteLine(stream.Position); 

     foreach (var entry in zip.Entries) 
     { 
      using (var entryStream = entry.Open()) 
      { 
       entryStream.CopyTo(System.IO.Stream.Null); 
      } 
     } 

     // Print stream position after. 
     Console.WriteLine(stream.Position); 
    } 
} 
関連する問題