【发布时间】:2020-04-30 17:47:34
【问题描述】:
我需要使用 Powershell 检查两个文件是否相同,但有以下限制:前 2K 中有八个 特定 字节允许不同(如果您有兴趣, 它是 ext4 图像的超级块中的某些时间戳字节)。
我在 Stack Overflow(显然)上找到的用于进行 full 检查的代码如下:
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = [System.BitConverter]::ToString(
$md5.ComputeHash([System.IO.File]::ReadAllBytes("fspec.bin")))
这给了我整个文件的哈希值,但我真正需要的是:
- 文件的前 2K 作为字节数组,因此我可以检查细节;和
- 文件余数的校验和以检查相等性。
System.IO.File 类具有 ReadAllBytes,但似乎没有读取文件部分的能力,也没有寻找特定位置的能力。
我尝试读取字节数组并使用数组切片来获取以下部分:
$restOfFile = [System.IO.File]::ReadAllBytes("fspec")
$firstTwoK = $restOfFile[0..2048]
$restOfFile = $restOfFile[2048..$restOfFile.Length]
# Then:
# 1. Check bytes in firstTwoK.
# 2. Check MD5 of all bytes in restOfFile.
不幸的是,它是一个 750M 文件的事实导致了问题:
Array dimensions exceeded supported range.
At C:\testprog\testprog.ps1:42 char:1
+ ${devBytes} = ${devBytes}[2048..${devBytes}.Length]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], OutOfMemoryException
+ FullyQualifiedErrorId : System.OutOfMemoryException
有没有一种实用的方法可以满足我的需要?
【问题讨论】:
-
HashAlgorithm 类有一个overload for ComputeHash,它接受你感兴趣的块的偏移量和大小。
标签: powershell