如何修复损坏的复制文件的损坏数据包?

How to repair corrupted packets for a corrupted copied file?

问题是如何修复,而不是如何复制。

因此,如果我们复制一个文件,并在复制前后为该文件创建一个 HashMap(在 C# 中使用 MD5 或 CRC32),这样我们就可以在复制后检查文件是否已完全复制而没有任何损坏.

假设我们在这个复制的文件中发现了一个损坏的数据包。 问题是:除了重新复制文件,我们能做些什么来仅使用 MD5 或 CRC32 或 C# 中的任何其他技术来修复损坏的数据包?

没有。您需要的是 Reed-Solomon 码,这是一种纠错码。根据您添加的支票信息量,它可以更正消息中有限数量的错误。这仅在您的错误通道可能只引入少量错误时才有用。

Reed-Solomon 代码擅长纠正长时间的错误突发,这是它们使 CD 成为可能的部分原因。 Reed-Solomon 代码可以纠正由 CD 上的宏观划痕引起的突发错误,其中编码位是微观的。

正如Mark Adler 所说,最好使用Reed-Solomon 来修复损坏的Pakets。 此外,系统方法 File.Copy() 已经在检查复制的数据包中是否有任何损坏。