CopyTo 是否将整个内容存储在内存中?
Does CopyTo store the whole thing in memory?
我有以下代码片段,旨在将文件添加到 .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;
}
}
}
(从评论中复制 - 因为这回答了问题)
问题是 ZipArchiveMode.Update,可能需要对磁盘上的文件进行重大更改。当您使用 ZipArchiveMode.Create
时,它只能直接流式传输到磁盘
我有以下代码片段,旨在将文件添加到 .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;
}
}
}
(从评论中复制 - 因为这回答了问题)
问题是 ZipArchiveMode.Update,可能需要对磁盘上的文件进行重大更改。当您使用 ZipArchiveMode.Create
时,它只能直接流式传输到磁盘