我有一個XmlDocument類型的內存中的文檔和一個從xml文件目錄加載的文件。我想比較這些最快的方式。XMLDocument與另一個文件比較
目前這是我如何做...但這是一個散列,並沒有像字節字節一樣快。我想修改這個字節一個字節..但想檢查任何可以加快速度......如快速長度比較。我不確定是否可以檢查長度,因爲一個在內存中,另一個從文件加載。文件名總是相同的,所以我不能檢查。
protected bool AreFilesTheSame(XmlDocument doc, string fileToCompareTo)
{
if (!File.Exists(fileToCompareTo))
return (false);
try
{
SHA1CryptoServiceProvider cryptNewPub = new SHA1CryptoServiceProvider();
byte[] xmlBytes = Encoding.UTF8.GetBytes(doc.OuterXml.ToCharArray());
cryptNewPub.ComputeHash(xmlBytes);
SHA1CryptoServiceProvider cryptOldPub = new SHA1CryptoServiceProvider();
FileStream fileStream = File.OpenRead(fileToCompareTo);
cryptOldPub.ComputeHash(fileStream);
fileStream.Close();
if (cryptNewPub.Hash.Length != cryptOldPub.Hash.Length)
return (false);
for (int i = 0; i < cryptNewPub.Hash.Length; i++)
{
if (cryptNewPub.Hash[i] != cryptOldPub.Hash[i])
return (false);
}
return (true);
}
catch
{
return (false);
}
}
您是否嘗試過簡單地加載文件的內容在一個字符串來比較,然後簡單地比較該字符串到'doc.OuterXml'。這應該比計算散列更快。 – LB2
你需要字節比較,文本比較(忽略編碼差異)還是XML比較(忽略格式化和命名空間前綴)? –
我認爲字節比較是全部。基本上它的xml文件是在內存中創建的......並且它會檢查之前創建的xml文件,這些文件現在位於驅動器中,以便在寫入之前查看它們是否不同。即使數據不同,文件名也是一樣的。我認爲它的可能長度可能是相同的,它是一個不同的文件。不關心XML的結構。基本上是一個字節比較,以確定是否需要覆蓋文件...真實或錯誤的答案。 – user3357948