验证c#Embedded Resource是否与文件匹配



我知道这可能是一个没有正确答案的问题

我有一个C#窗口应用程序,该程序集中包含一个嵌入式资源。我一直在尝试想出一种方法来比较资源流的内容,以确定该流的内容是否与文件系统上的特定文件匹配。

例如

using(var resourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(@"Manifest/Resource/Path/thing.exe"))
using(var fileStream = new FileStream(@"File/System/Path/thing.exe", FileMode.Read))
    // Compare Contents (thing.exe may be an older version)
    if(CompareStreamContents(resourceStream, fileStream))
    {
        /* Do a thing */
    }
    else
    {
        /* Do another thing*/
    }

有比简单地逐字节比较更好的方法吗?想法?(提前感谢!)

根据我的评论:

    private bool CompareStreamContents(Stream resourceStream, Stream fileStream)
    {
        var sha = new SHA256CryptoServiceProvider();
        var hash1 = Convert.ToBase64String(sha.ComputeHash(ReadToEnd(resourceStream)));
        var hash2 = Convert.ToBase64String(sha.ComputeHash(ReadToEnd(fileStream)));
        return hash1 == hash2;
    }
    private byte[] ReadToEnd(Stream stream)
    {
        var continueRead = true;
        var buffer = new byte[0x10000];
        var ms = new MemoryStream();
        while (continueRead)
        {
            var size = stream.Read((byte[])buffer, 0, buffer.Length);
            if (size > 0)
            {
                ms.Write(buffer, 0, size);
            }
            else
            {
                continueRead = false;
            }
        }
        return ms.ToArray();
    }

如果您计划在比较之后对流执行其他操作,则可能需要在从比较方法返回之前将流位置设置回原点。

相关内容

  • 没有找到相关文章

最新更新