我想知道如何比较两个文件,以确定它是否完全相同。 我知道如何比较文件名,创建/修改日期,甚至如果需要散列。检测两个文件是否严格相同,要比较什么?
但是我不知道如何比较文件中的元数据(实际上我不知道它是如何存储的):安全性配置,兼容性设置,潜在的防病毒时间戳等等。
我的最终目标是要深,以便在不同的计算机
谢谢比较两个文件系统 史蒂夫
[编辑]澄清我重新制定问题的标题
我想知道如何比较两个文件,以确定它是否完全相同。 我知道如何比较文件名,创建/修改日期,甚至如果需要散列。检测两个文件是否严格相同,要比较什么?
但是我不知道如何比较文件中的元数据(实际上我不知道它是如何存储的):安全性配置,兼容性设置,潜在的防病毒时间戳等等。
我的最终目标是要深,以便在不同的计算机
谢谢比较两个文件系统 史蒂夫
[编辑]澄清我重新制定问题的标题
什么是文件?在现代的文件系统(比如NTFS)你有
其余(配置,防病毒时间戳/这是什么/ etc)是stor编辑在文件之外,而不是文件。
所以你需要检查文件的上述位并比较它们。
不同的方法存在读取不同位的信息,你需要全部使用它们将所有的信息放在一起并比较它们的不同文件。
您需要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;
}
在实际的解决方案,您可能要计算在块或像这样的哈希,因为也许要比较的文件太大而无法读取内存和哈希的所有字节他们。
只需通过System.IO.File上的所有getter即可。
GetAccessControl
GetAttributes
GetCreationTime
...
ReadAllBytes
如果有别的什么事,你的“同一文件”的定义取决于(如绝对路径,如果在不同的机器),然后拿到为好,但你没有明确指出是什么。
*严格*完全相同,如同存储在同一磁盘上的相同位置? – fredley 2011-02-01 14:48:19
哪个文件系统? – OrangeDog 2011-02-01 14:50:05
@fredley,文件系统中的相同位置,相同的属性,相同...一切 – 2011-02-01 14:53:05