c# - 在 C# 中比较二进制文件

标签 c# file compare

我想比较两个二进制文件。其中一个已经存储在服务器上,并且在我最初存储它时在数据库中有一个预先计算的 CRC32。

我知道如果CRC不一样,那么文件肯定不一样。但是,如果 CRC 相同,我不知道这些文件是相同的。因此,我正在寻找一种非常有效的方法来比较两个流:一个来自发布的文件,一个来自文件系统。

我不是流方面的专家,但我很清楚,就内存使用而言,我很容易搬起石头砸自己的脚。

最佳答案

static bool FileEquals(string fileName1, string fileName2)
{
    // Check the file size and CRC equality here.. if they are equal...    
    using (var file1 = new FileStream(fileName1, FileMode.Open))
        using (var file2 = new FileStream(fileName2, FileMode.Open))
            return FileStreamEquals(file1, file2);
}

static bool FileStreamEquals(Stream stream1, Stream stream2)
{
    const int bufferSize = 2048;
    byte[] buffer1 = new byte[bufferSize]; //buffer size
    byte[] buffer2 = new byte[bufferSize];
    while (true) {
        int count1 = stream1.Read(buffer1, 0, bufferSize);
        int count2 = stream2.Read(buffer2, 0, bufferSize);

        if (count1 != count2)
            return false;

        if (count1 == 0)
            return true;

        // You might replace the following with an efficient "memcmp"
        if (!buffer1.Take(count1).SequenceEqual(buffer2.Take(count2)))
            return false;
    }
}

关于c# - 在 C# 中比较二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/968935/

相关文章:

c# - 进程间消息广播

c# - 如何在 C# 中使用不同的文件名保存从网络摄像头捕获的图像

java - 如何按升序对文件名进行排序?

python - 通读非结构化 xls 文件

c# - 如何强制 FlowDocument 刷新其在 DataContext 集上的内容?

c# - 通过 Dispatcher 调用异步 lambda 时双重等待

C 将文件流作为函数参数传递

java - 比较 2 个文本文件并找出列表中的差异并找出哪些列表值不匹配

java - 使用 GregorianCalendar 的实例来确定过去的时间?

java - 比较每个列表中每个索引的项目