在我最终决定自己发布这个问题之前,我已经阅读了一些关于 SO 的问题和答案。
我的目标是编写一个修补程序,它可以使用最新文件检查某些位置的某些内容。最好是能够尽可能少地下载和上传,但能够检测修改的文件并替换完整文件,或者最好仅替换二进制增量文件。
我考虑过在服务器端对 block 进行校验和,然后在客户端进行检查,然后仅获取具有不同校验和的那些 block 。
我真正想知道的是理论方法,因为我读了一些 VCDIFF 和其他方法,但我不确定我是否理解它们。这类问题有通用的方法吗? block 的想法正确吗?我将如何用 C# 或 Java 实现它?
提前谢谢您!
最佳答案
根据文件类型(文本、二进制),您可以使用 diff 算法来缩小必须发送的更改范围。
我们的一个实习生做了关于版本控制管理的研究,他根据一些研究提出了一个 diff 算法。也许对你有用。
您可以在这里找到一些文献:
- E. Myers,“O(ND) 差分算法及其变体”,Algorithmica,第 14 页。 1986 年 15 日。
- mmanela,“Diffplex”,http://diffplex.codeplex.com/releases/view/66796 .
如果您想发送文件,我至少会考虑校验和和长度,因为它们肯定是唯一的。
您可以创建类似的格式
- 文件名
- 校验和
- 长度
将其发布到服务器。如果满足以下条件,则让它返回更改:
- 该文件尚未在客户端上
- 校验和或长度不同
在所有其他情况下,保留它。
关于c# - 编写修补程序应用程序以自动更新某些文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21726673/