如何在将文件保存到磁盘时使用流计算哈希值?
我不想:首先保存文件,然后从磁盘加载它,只是为了计算散列,在任何时候必须将整个文件加载到内存中,使用有异步对应的方法的非异步版本,或者使用在.NET6或更高版本中标记为过时的API.
这就是我到目前为止一直得"err"
分的东西
public async Task HashOnTheFly()
{
var path = "/tmp/a.txt";
await SaveAsync(File.OpenRead(path), "/tmp/b.txt", default);
async Task SaveAsync(Stream stream, string path, CancellationToken ct)
{
var sha512 = SHA512.Create();
var fileName = Path.GetFileName(path);
var destinationPath = Path.Combine("/tmp", fileName);
await using var fileStream = File.Create(destinationPath);
await using var cryptoStream = new CryptoStream(fileStream, sha512, CryptoStreamMode.Read);
await stream.CopyToAsync(fileStream, ct);
if (sha512?.Hash is { } computedHash)
Console.WriteLine(computedHash);
else
Console.WriteLine("err");
}
}