我想验证我的ZipArchive。为此,我将所有条目复制到MemoryStream。我只想知道我是否有能力打开并复制我的参赛作品。
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);
}
}
}
}
但这种方法会消耗我的记忆力。是否更好地使用Stream.Null而不是MemoryStream?
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 :(得分: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);
}
}