我如何检测损坏的文件?

我如何检测损坏的文件?

我有许多文件,MP4、Mp3、Exe 和其他文件,在备份期间由于某种原因未能正确复制到硬盘上,我使用十六进制编辑器检查了文件内容,发现许多损坏的文件在应该有数据的地方填充了 00,有些文件在本应是功能性数据的地方填充了随机数据。至少对于填充了 00 的文件,应该有办法搜索所有这些文件并找到它们。我尝试了 Windows 搜索工具(Windows 8.1)并启用了文件内容搜索,但是,由于无法在 Windows 搜索中搜索十六进制,所以我搜索了代表 00 Hex 的 ASCII ..... 句点。我从十六进制编辑器复制了正确的 .... 并将其粘贴到搜索中,但没有用。

我想找到所有包含大量 00 十六进制填充的文件,但不知道如何操作,任何提示都非常感谢。谢谢。

答案1

二进制查看器程序具有一项功能,可让您在给定的目录中搜索十六进制序列和二进制模式(或者您可以为整个机器指定根)。

另一个可能的解决方案是以编程方式扫描所有文件并挑选出“00”值数量高于预期的文件(即“00”的平均数量较大的文件)。您需要使用编程语言来实现这一点。由于我是一名统计学家,我喜欢R编程语言,因为:

  1. 它是免费的;并且
  2. 它相对容易学。

在中R,您可以使用以下代码检查文件的“十六进制”值(我假设您在这里查看的是 1 字节十六进制)R

install.packages("DescTools")
library(DescTools)
myBinary="D:/temp/2.jpg"

myhex = readRaw(myBinary)
#View first 20 entries
head(myhex$fileRaw, n=20)
 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00

现在您可以找到“00”条目的平均数量:

#Find the mean number of times a "00" entry appears in this file
mean(myhex$fileRaw=="00")
 0.008298835

您需要做的就是在这个代码周围放置一个简单的循环结构,以循环遍历目录中的所有文件并输出“00”条目的平均数量。您可以更加复杂,并通过在一堆已知好的(即未损坏的)文件,并计算其中文件中“00”条目的平均均值(即均值)。您可能可以计算出一个典型的置信区间,并可能使用置信区间的上限作为截止点,输入到您的程序中,以搜索未知腐败。这会帮助你挑出那些腐败分子。

相关内容