C# 上载对文件所做的更改(FTP)

C# 上载对文件所做的更改(FTP),c#,.net,ftp,C#,.net,Ftp,我在做一个FTP上传客户端。我可以上传文件,但我不知道如何上传对文件所做的更改。我所说的更改不是指文件被重命名,而是指其内容发生了更改。例如,我有一个*.rar文件(足够大),其中包含一些文件。当我添加一些新文件时,我不想上传整个*.rar,只想上传更改的部分。我知道关于代码> WebQuestestMultudio.FTP.AppEdfile ,但是它只在文件的末尾添加,如果在中间应用了什么变化呢?我会得到一个垃圾文件。。。 我读过关于“binary diff”的文章&看到了一些直接在服务器上

我在做一个FTP上传客户端。我可以上传文件,但我不知道如何上传对文件所做的更改。我所说的更改不是指文件被重命名,而是指其内容发生了更改。例如,我有一个*.rar文件(足够大),其中包含一些文件。当我添加一些新文件时,我不想上传整个*.rar,只想上传更改的部分。我知道关于代码> WebQuestestMultudio.FTP.AppEdfile ,但是它只在文件的末尾添加,如果在中间应用了什么变化呢?我会得到一个垃圾文件。。。
我读过关于“binary diff”的文章&看到了一些直接在服务器上进行更改的客户端(FileZilla、Direct FTP、ALFTP)

实际上,如果rar归档文件中的文件发生了更改,您应该重建并重新上传整个归档文件

FTP共享不保存更改或重命名的文件的历史记录。因此,唯一的解决办法是:

  • 在客户端应用程序上以某种xml格式保存文件列表
  • 从ftp检索文件列表时,请将if与历史记录xml中的文件列表进行比较
  • 这两个步骤不会帮助您查找重命名了哪些文件,但会为您提供删除或添加了哪些文件的信息

    比较文件是否被更改可以通过保存它们的历史文件大小来完成。如果需要更精确的检查,可以为文件生成CRC:


    但是生成crc是一项很长的任务。

    可能取决于FTP版本协议和客户端/服务器版本。但我真的不是一个ftp专家。问题是:ftp允许随机文件访问吗?除了必须计算二进制差分外,还必须应用该差分。。。正如我从你们的“类似问题”中了解到的,如果我尝试从特定点写入一个文件,它会在这里一分为二吗?