我在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個zip文件f1.zip和f2.zip。然後,我將其中的2個文件(分別在f1.zip和f2.zip中的f1.txt和f2.txt)提取到MemoryStream對象上。我現在想比較這些文件,並確定它們是否相同。我有兩種方法:
1)逐字節讀取內存流並比較它們。 爲此,我會用
ms1.BeginRead(b1, 0, (int) ms1.Length, null, null);
ms2.BeginRead(b2, 0, (int) ms2.Length, null, null);
,然後運行一個for循環和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.所以50000以上的循環會比字符串比較慢嗎? – user2945623
@ user2945623不,我敢打賭你的機器會很快完成這個循環,你甚至不會注意到。 –