CopyTo是否将整个内容存储在内存中?

时间:2015-06-04 10:53:14

标签: c# zip sha1

我有以下代码片段,用于将文件添加到.zip文件,同时计算其sha1校验和。

但是,大文件的内存不足。

它的哪一部分导致整个文件在内存中?当然这应该只是流式传输?

using (ZipArchive archive = ZipFile.Open(buildFile, ZipArchiveMode.Update))
{
    foreach (var fileName in nameList)
    {
        ZipArchiveEntry entry = archive.CreateEntry(source.filename);
        using (Stream zipData = entry.Open())
        using (SHA1Managed shaForFile = new SHA1Managed())
        using (Stream sourceFileStream = File.OpenRead(fileName))
        using (Stream sourceData = new CryptoStream(sourceFileStream, shaForFile, CryptoStreamMode.Read))
        {
            sourceData.CopyTo(zipData);
            print fileName + ':' + shaForFile.Hash;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

(从评论中复制 - 因为这回答了问题)

问题是ZipArchiveMode.Update,它可能需要对磁盘上的文件进行重大更改。当您使用ZipArchiveMode.Create

时,它只能直接流式传输到磁盘