1、使用System.security.Cryptography.HashAlgorithm類為每個文件生成一個哈希碼,然后比較兩個哈希碼是否一致。
2、 在比較文件內容的時候可以采用好幾種方法。例如,檢查文件的某一特定部分是否一致;如果願意,你甚至可以逐字節讀取文件,逐字節進行比較。這兩種方法都是可以的,但在某些情況下,還是使用哈希碼算法更為方便。
哈希算法將任意長度的二進制值映射為固定長度的較小二進制值,這個小的二進制值稱為哈希值。
該算法為一個文件生成一個小的(通常約為20字節)二進制“指紋”(binary fingerprint)。從統計學角度看,不同的文件不可能生成相同的哈希碼。事實上,即使是一個很小的改動(比如,修改了源文件中的一個bit),也會有50%的幾率來改變哈希碼中的每一個bit。因此,哈希碼常常用於數據安全方面。要生成一個哈希碼,你必須首先創建一個HashAlgorithm對象,而這通常是調用HashAlgorithm.Create方法來完成的;然后調用HashAlgorithm.ComputeHash方法,它會返回一個存儲哈希碼的字節數組。
如何獲取文件的基本信息:
可以使用FileInfo類的相關屬性
FileInfo.Exists:獲取指定文件是否存在;
FileInfo.Name,FileInfo.Extensioin:獲取文件的名稱和擴展名;
FileInfo.FullName:獲取文件的全限定名稱(完整路徑);
FileInfo.Directory:獲取文件所在目錄,返回類型為DirectoryInfo;
FileInfo.DirectoryName:獲取文件所在目錄的路徑(完整路徑);
FileInfo.Length:獲取文件的大小(字節數)
FileInfo.IsReadOnly:獲取文件是否只讀;
FileInfo.Attributes:獲取或設置指定文件的屬性,返回類型為FileAttributes枚舉,可以是多個值的組合;
FileInfo.CreationTime、FileInfo.LastAccessTime、FileInfo.LastWriteTime:分別用於獲取文件的創建時間、訪問時間、修改時間;
FileInfo.Exists:獲取指定文件是否存在;
FileInfo.Name,FileInfo.Extensioin:獲取文件的名稱和擴展名;
FileInfo.FullName:獲取文件的全限定名稱(完整路徑);
FileInfo.Directory:獲取文件所在目錄,返回類型為DirectoryInfo;
FileInfo.DirectoryName:獲取文件所在目錄的路徑(完整路徑);
FileInfo.Length:獲取文件的大小(字節數)
FileInfo.IsReadOnly:獲取文件是否只讀;
FileInfo.Attributes:獲取或設置指定文件的屬性,返回類型為FileAttributes枚舉,可以是多個值的組合;
FileInfo.CreationTime、FileInfo.LastAccessTime、FileInfo.LastWriteTime:分別用於獲取文件的創建時間、訪問時間、修改時間;
利用哈希值判斷兩個文件內容是否相同 代碼如下:
只需要建立一個控制台應用程序即可。
public static void CompareFile() { string p_1 = @"E:\readme_1.txt"; string p_2 = @"E:\readme_2.txt"; //計算第一個文件的哈希值 var hash = System.Security.Cryptography.HashAlgorithm.Create(); var stream_1 = new System.IO.FileStream(p_1, System.IO.FileMode.Open); byte[] hashByte_1 = hash.ComputeHash(stream_1); stream_1.Close(); //計算第二個文件的哈希值 var stream_2 = new System.IO.FileStream(p_2, System.IO.FileMode.Open); byte[] hashByte_2 = hash.ComputeHash(stream_2); stream_2.Close(); //比較兩個哈希值 if (BitConverter.ToString(hashByte_1) == BitConverter.ToString(hashByte_2)) Console.WriteLine("兩個文件相等"); else Console.WriteLine("兩個文件不等"); }