How can we determine if 2 files are equal? We can compare lengths, dates created and modified. But this is not always enough.
Equal
contentsThere is no way to know if the contents are the same unless we test them. We demonstrate a method that compares 2 files for equality.
The simplest way to check 2 files for equal contents is to use File.ReadAllBytes
on each file. Then we must compare the result arrays.
byte
must be compared. If the arrays have different lengths, we know the files are not equal.Main()
.using System; using System.IO; class Program { static bool FileEquals(string path1, string path2) { byte[] file1 = File.ReadAllBytes(path1); byte[] file2 = File.ReadAllBytes(path2); if (file1.Length == file2.Length) { for (int i = 0; i < file1.Length; i++) { if (file1[i] != file2[i]) { return false; } } return true; } return false; } static void Main() { bool a = FileEquals("C:\\stage\\htmlmeta", "C:\\stage\\htmlmeta-aspnet"); bool b = FileEquals("C:\\stage\\htmllink", "C:\\stage\\htmlmeta-aspnet"); Console.WriteLine(a); Console.WriteLine(b); } }True False
FileInfo
noteIf the common case in your program is that the files are not equal, then using a FileInfo
struct
and the Length
property to compare lengths first would be faster.
Suppose we are trying to update a directory of files but some files may not be different. Instead of rewriting files, we can test them for equality first.
FileEquals
method can significantly improve performance.We can guess whether two files are equal by testing their dates and lengths. But we cannot know if every single byte
is equal unless we test every single byte
.