C# 4.0 检测两个文件是否完全相同,比较什么?
我想知道如何比较两个文件以确定它是否完全相同。 我知道如何比较文件名、创建/修改日期,甚至在需要时进行哈希 但是,我不知道如何比较文件上的元数据(我实际上不知道它是如何存储的):安全配置、兼容性设置、潜在的防病毒时间戳等等 我的最终目标是深入比较不同计算机上的两个文件系统 谢谢 史蒂夫C# 4.0 检测两个文件是否完全相同,比较什么?,c#-4.0,filesystems,ntfs,filecompare,C# 4.0,Filesystems,Ntfs,Filecompare,我想知道如何比较两个文件以确定它是否完全相同。 我知道如何比较文件名、创建/修改日期,甚至在需要时进行哈希 但是,我不知道如何比较文件上的元数据(我实际上不知道它是如何存储的):安全配置、兼容性设置、潜在的防病毒时间戳等等 我的最终目标是深入比较不同计算机上的两个文件系统 谢谢 史蒂夫 [编辑]为了澄清,我重新制定了问题的标题您需要对两个文件进行MD5、SHA哈希运算,并比较两者是否具有相同的总和 检查System.Security.Cryptography中的MD5CryptoServiceP
[编辑]为了澄清,我重新制定了问题的标题您需要对两个文件进行MD5、SHA哈希运算,并比较两者是否具有相同的总和 检查System.Security.Cryptography中的MD5CryptoServiceProvider和SHA512CryptoServiceProvider 是这样的:
private string ComputeHashAsText(byte[] fileBytes)
{
using (SHA512CryptoServiceProvider cryptoService = new SHA512CryptoServiceProvider())
{
return Encoding.ASCII.GetString(cryptoService.ComputeHash(fileBytes));
}
}
public bool CompareFiles(string pathA, string pathB)
{
string hashPathA = ComputeHashAsText(File.ReadAllBytes(pathA));
string hashPathB = ComputeHashAsText(File.ReadAllBytes(pathB));
return hashPathA == hashPathB;
}
在实际的解决方案中,您可能希望以块或类似的方式计算哈希值,因为要比较的文件可能太大,无法将所有字节读入内存并对其进行哈希运算。什么构成文件?在现代文件系统(比如NTFS)上
- 文件附件(时间、FAT属性)
- 未命名文件流
- 零个或多个备用数据流(ADS)
- 扩展属性
- NTFS安全性(存储在ADS中,但我们可以单独识别)
不同的方法用于读取不同的信息位,您需要使用所有这些方法将所有信息汇集在一起,并对不同的文件进行比较 只需检查System.IO.File上的所有getter即可
GetAccessControl
GetAttributes
GetCreationTime
...
ReadAllBytes
如果您对“同一文件”的定义还依赖于其他任何东西(如不同机器上的绝对路径),那么也要获得它,但您还没有弄清楚它是什么。严格相同,就像存储在同一磁盘上的同一位置一样?@fredley,文件系统中的相同位置,相同属性,相同。。。我的问题更多的是“比较什么”,而不是“如何比较”。但是谢谢你的tipI,我在你的问题中读到了“如何比较”(你的问题是“我不知道如何比较[…]):我已经回答了这个问题,因为这是确保两个文件在不同的物理、网络位置是相同的最好方法。我知道你在问元数据,但是,我重复一遍,比较两个文件,因为元数据不一定是知道两者相同的好方法(如果两个不同的流具有相同的元数据呢?)。我想比较内容(简单)和元数据。我的最终目标是检测完整的文件系统differences@Steve我明白了,可以理解。我一直在寻找“尤金·梅耶夫斯基·埃尔多斯”的答案。