我在内存中有一个XmlDocument类型的文档和一个从xml文件的目录加载的文件。我想以最快的方式比较这些。
目前我正在这样做......但这是一个哈希,并不像字节一样快。我想将其修改为逐字节...但是想要检查可能加快这一点的任何事情......例如快速长度比较。我不确定我是否可以检查长度,因为一个在内存中,另一个是从文件加载。文件名总是一样的。所以我无法检查。
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);
}
}
答案 0 :(得分:1)
也许最简单的方法是加载第二个XML文件并比较OuterXML:
protected bool AreFilesTheSame(XmlDocument doc, string fileToCompareTo)
{
if (!File.Exists(fileToCompareTo))
return (false);
try
{
XmlDocument doc2 = new XmlDocument();
doc2.Load(fileToCompareTo);
return doc.OuterXml == doc2.OuterXml;
}
catch
{
return (false);
}
}