● 写一个FTP同步软件

需求分析

目前个人网站是使用MWeb写作,然后生成本地html,使用GoodSync通过FTP把本地html同步到网站服务器。

GoodSync功能强大,但是收费软件,过试用期会定期弹窗,且免费版不能同步超过100个文件。

WX20210226-101715

所以我尝试自己写一个同步软件,满足以下功能即可:

  • 指定目录所有的文件,定时同步到FTP远程目录
  • 不要求最终一致性,FTP远程目录内文件允许冗余
  • 空文件夹不做处理

功能分析

1.同步规则

  • 使用定时器每隔10秒同步一次;
  • 本地增/删文件夹,删除远程FTP服务器文件夹;
  • 本地增/删文件,删除远程FTP服务器文件;
  • 文件夹的判断要前置于文件操作,防止文件上传失败;
  • 文件夹/文件的删除操作要前置于上传操作,防止远程文件丢失。

2.技术原理

因为不需要最终一致性,所以少了一步远程文件与本地文件的差异对比。只做本地的本次与上次数据列表差异对比。

2.1 如何判断文件夹是否需要同步

  • 新建两个List集合_oldFolderList和_newFolderList,定期对比指定目录下的文件夹集合是否相同,不同则新建/删除远程目录。

2.2 如何判断文件是否需要同步

新建两个Dictionary<string, string>字典_oldFileList和_newFileList,定期对比集合内文件的MD5值是否相同,不同则新建/删除远程文件。

3. 其他问题

  • 定时器timer如果设置的时长过短,会导致事件重复执行,所以需要一个全局布尔型_workDone判断上一个任务处理完成没有。
  • 程序需要做异常处理优化、日志存储(暂未处理)。

4.是否有其他方案

有,FileSystemWatcher。

5.界面

源码:https://github.com/JinYazhou/FTPSync