У меня есть следующая ситуация в C#:Какой лучший способ сравнить 2 файла?
ZipFile z1 = ZipFile.Read("f1.zip");
ZipFile z2 = ZipFile.Read("f2.zip");
MemoryStream ms1 = new MemoryStream();
MemoryStream ms2 = new MemoryStream()
ZipEntry zipentry1 = zip1["f1.dll"];
ZipEntry zipentry1 = zip2["f2.dll"];
zipentry1.Extract(ms1);
zipentry2.Extract(ms2);
byte[] b1 = new byte[ms1.Length];
byte[] b2 = new byte[ms2.Length];
ms1.Seek(0, SeekOrigin.Begin);
ms2.Seek(0, SeekOrigin.Begin);
, что я сделал здесь открыт 2 почтовые файлы f1.zip и f2.zip. Затем я извлекаю из них 2 файла (f1.txt и f2.txt внутри f1.zip и f2.zip соответственно) на объекты MemoryStream. Теперь я хочу сравнить файлы и выяснить, являются ли они одинаковыми или нет. У меня было 2 способа:
1) Прочитайте байты памяти байтами по байтам и сравните их. Для этого я хотел бы использовать
ms1.BeginRead(b1, 0, (int) ms1.Length, null, null);
ms2.BeginRead(b2, 0, (int) ms2.Length, null, null);
, а затем запустить цикл и сравнить каждый байт в b1 и b2.
2) Получите строковые значения для обоих потоков памяти, а затем выполните сравнение строк. Для этого я бы использовал
string str1 = Encoding.UTF8.GetString(ms1.GetBuffer(), 0, (int)ms1.Length);
string str2 = Encoding.UTF8.GetString(ms2.GetBuffer(), 0, (int)ms2.Length);
, а затем сделать простую строку сравнения.
Теперь я знаю, что сравнение байта по байт всегда даст мне правильный результат. Но проблема с этим - это займет много времени, поскольку я должен сделать это для тысяч файлов. Вот почему я думаю о методе сравнения строк, который пытается выяснить, равны ли файлы или не очень быстро. Но я не уверен, что сравнение строк даст мне правильный результат, так как файлы являются либо dll, либо медиафайлами и т. Д., И обязательно будут содержать специальные символы.
Может ли кто-нибудь сказать мне, будет ли метод сравнения строк работать правильно или нет?
Заранее спасибо.
P.S. : Я использую DotNetLibrary.
Сравнение строк будет МНОГО медленнее, чем сравнение байтов. – Magus
, но число байтов больше 50000. Таким образом, цикл for более 50000 будет медленнее, чем сравнение строк? – user2945623
@ user2945623 Нет. Уверен, что ваша машина завершит этот цикл так быстро, что вы даже не заметите. –