Compare binary files in C#

后端 未结 6 2094
渐次进展
渐次进展 2020-12-07 18:09

I want to compare two binary files. One of them is already stored on the server with a pre-calculated CRC32 in the database from when I stored it originally.

I know

6条回答
  •  借酒劲吻你
    2020-12-07 18:43

    The accepted answer had an error that was pointed out, but never corrected: stream read calls are not guaranteed to return all bytes requested.

    BinaryReader ReadBytes calls are guaranteed to return as many bytes as requested unless the end of the stream is reached first.

    The following code takes advantage of BinaryReader to do the comparison:

        static private bool FileEquals(string file1, string file2)
        {
            using (FileStream s1 = new FileStream(file1, FileMode.Open, FileAccess.Read, FileShare.Read))
            using (FileStream s2 = new FileStream(file2, FileMode.Open, FileAccess.Read, FileShare.Read))
            using (BinaryReader b1 = new BinaryReader(s1))
            using (BinaryReader b2 = new BinaryReader(s2))
            {
                while (true)
                {
                    byte[] data1 = b1.ReadBytes(64 * 1024);
                    byte[] data2 = b2.ReadBytes(64 * 1024);
                    if (data1.Length != data2.Length)
                        return false;
                    if (data1.Length == 0)
                        return true;
                    if (!data1.SequenceEqual(data2))
                        return false;
                }
            }
        }
    

提交回复
热议问题