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("两个文件不等"); }