我想知道如何比較兩個文件,以確定它是否完全相同。 我知道如何比較文件名,創建/修改日期,甚至如果需要散列。檢測兩個文件是否嚴格相同,要比較什麼?
但是我不知道如何比較文件中的元數據(實際上我不知道它是如何存儲的):安全性配置,兼容性設置,潛在的防病毒時間戳等等。
我的最終目標是要深,以便在不同的計算機
謝謝比較兩個文件系統 史蒂夫
[編輯]澄清我重新制定問題的標題
我想知道如何比較兩個文件,以確定它是否完全相同。 我知道如何比較文件名,創建/修改日期,甚至如果需要散列。檢測兩個文件是否嚴格相同,要比較什麼?
但是我不知道如何比較文件中的元數據(實際上我不知道它是如何存儲的):安全性配置,兼容性設置,潛在的防病毒時間戳等等。
我的最終目標是要深,以便在不同的計算機
謝謝比較兩個文件系統 史蒂夫
[編輯]澄清我重新制定問題的標題
什麼是文件?在現代的文件系統(比如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