【发布时间】:2020-12-16 17:17:05
【问题描述】:
脚本应该复制文件并计算它们的哈希值。 我的目标是制作将读取文件一次而不是 3 次的函数( read_for_copy + read_for_hash + read_for_another_copy )以最小化网络负载。 所以我尝试读取一大块文件,然后计算 md5 哈希和并将文件写到几个地方。 该文件的大小可能从 100 MB 到 2 TB 甚至更多。此时不需要检查文件身份,只需要计算初始文件的哈希和即可。
我在计算哈希和方面陷入困境:
$ifile = "C:\Users\User\Desktop\inputfile"
$ofile = "C:\Users\User\Desktop\outputfile_1"
$ofile2 = "C:\Users\User\Desktop\outputfile_2"
$md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$bufferSize = 10mb
$stream = [System.IO.File]::OpenRead($ifile)
$makenew = [System.IO.File]::OpenWrite($ofile)
$makenew2 = [System.IO.File]::OpenWrite($ofile2)
$buffer = new-object Byte[] $bufferSize
while ( $stream.Position -lt $stream.Length ) {
$bytesRead = $stream.Read($buffer, 0, $bufferSize)
$makenew.Write($buffer, 0, $bytesread)
$makenew2.Write($buffer, 0, $bytesread)
# I am stuck here
$hash = [System.BitConverter]::ToString($md5.ComputeHash($buffer)) -replace "-",""
}
$stream.Close()
$makenew.Close()
$makenew2.Close()
如何收集数据块来计算整个文件的哈希?
还有一个额外的问题:是否可以并行计算哈希并写入数据?特别是考虑到 PS 版本 6 不支持 workflow {parallel{}} ?
非常感谢
【问题讨论】:
-
我如何确定该函数只读取初始文件一次?
标签: powershell hash parallel-processing binarywriter