● 写一个FTP同步软件
需求分析
目前个人网站是使用MWeb写作,然后生成本地html,使用GoodSync通过FTP把本地html同步到网站服务器。
GoodSync功能强大,但是收费软件,过试用期会定期弹窗,且免费版不能同步超过100个文件。
所以我尝试自己写一个同步软件,满足以下功能即可:
- 指定目录所有的文件,定时同步到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。