C# 将XML文档与另一个文件进行比较

C# 将XML文档与另一个文件进行比较,c#,.net,xml,C#,.net,Xml,我在内存中有一个XmlDocument类型的文档和一个从一个目录加载的xml文件。我想以最快的方式比较这些 目前我就是这样做的……但这是一个散列,速度不如字节对字节快。我想把它一个字节一个字节地修改,但是我想检查一下有没有什么可以加快速度的东西,比如快速比较长度。我不确定是否可以检查长度,因为一个在内存中,另一个是从文件加载的。文件名总是一样的,所以我不能检查 protected bool AreFilesTheSame(XmlDocument doc, string fileToCompare

我在内存中有一个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);
        }
    }
protected bool arefiles相同(XmlDocument doc,string fileto compareto)
{
如果(!File.Exists(fileToCompareTo))
返回(假);
尝试
{
SHA1CryptoServiceProvider cryptNewPub=新的SHA1CryptoServiceProvider();
byte[]xmlBytes=Encoding.UTF8.GetBytes(doc.OuterXml.tocharray());
cryptNewPub.ComputeHash(xmlBytes);
SHA1CryptoServiceProvider cryptOldPub=新的SHA1CryptoServiceProvider();
FileStream FileStream=File.OpenRead(fileToCompareTo);
cryptOldPub.ComputeHash(文件流);
fileStream.Close();
if(cryptonewpub.Hash.Length!=cryptOldPub.Hash.Length)
返回(假);
for(int i=0;i
也许最简单的方法是加载第二个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);
        }
    }

您是否尝试过简单地将要比较的文件内容加载到字符串中,然后简单地将该字符串与
doc.OuterXml
进行比较。这应该比计算两者的哈希更快。您需要字节比较、文本比较(忽略编码差异)还是XML比较(忽略格式和名称空间前缀)?我认为字节比较就是全部。基本上,它的xml文件是在内存中创建的…并且它会检查以前创建的xml文件,这些文件现在在驱动器上..在写入之前查看它们是否不同。即使数据不同,文件名也会相同。我认为它的长度可能是相同的,它可能是一个不同的文件。不要关心xml的结构。基本上只是一个字节的比较,以确定它是否需要覆盖文件…正确或错误的答案。我只需要知道在最快的方法,看看是否有任何不同的文件。它可以是任何东西。如果文件不同,我需要识别它。事实上,它的XML并不重要,只是文件是如何加载的。一个作为文件流,另一个作为xmldocument…但将XML与XML进行比较似乎比逐字节比较慢…如何加载两者并只进行逐字节比较…因为它们是XML,字节内容可能不同,而XML内容是相同的。将两者加载到内存中,并将它们作为字符串进行比较是一种逐字节比较,可以确保忽略诸如空格之类的无关紧要的字节。