Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 检测两个文件是否完全相同,比较什么?_C# 4.0_Filesystems_Ntfs_Filecompare - Fatal编程技术网

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我明白了,可以理解。我一直在寻找“尤金·梅耶夫斯基·埃尔多斯”的答案。