我有一个inputStream
,我想用它来计算散列并将文件保存到磁盘。我想知道如何有效地做到这一点。我是否应该同时使用某些任务来执行此操作,是否应该将流传递复制到两个流,一个用于 saveFile
方法,一个用于 computeHash
方法,或者我应该做点别的?
最佳答案
使用在 block 级别上运行的哈希算法怎么样?您可以将 block 添加到哈希(使用 TransformBlock),然后将 block 写入流中每个 block 的文件。
未经测试的粗略镜头:
using System.IO;
using System.Security.Cryptography;
...
public byte[] HashedFileWrite(string filename, Stream input)
{
var hash_algorithm = MD5.Create();
using(var file = File.OpenWrite(filename))
{
byte[] buffer = new byte[4096];
int read = 0;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
hash_algorithm.TransformBlock(buffer, 0, read, null, 0);
file.Write(buffer, 0, read);
}
hash_algorithm.TransformFinalBlock(buffer, 0, read);
}
return hash_algorithm.Hash;
}
关于c# - 保存文件时计算哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11125135/