33. 客户端数据管理模块实现-数据信息设计
客户端要实现的功能是对指定文件夹中的文件自动进行备份上传。但是并不是所有的文件每次都需要上传,我们需要能够判断,哪些文件需要上传,哪些不需要,因此需要将备份的文件信息给管理起来,作为下一次文件是否需要备份的判断。因此需要被管理的信息包含以下:
- 文件路径名称
- 文件唯一标识:由文件名,最后一次修改时间,文件大小组成的一串信息
34. 客户端文件检测模块实现-文件操作实用类设计
这个其实与服务端的文件实用工具类雷同,只是功能需求并没有服务端那么多,复制过来即可。
namespace fs = std::experimental::filesystem;
class FileUtil {private:std::string _name;public:FileUtil(const std::string &name) :_name(name) {}size_t FileSize();time_t LastATime();time_t LastMTime();std::string FileName();bool GetPosLen(std::string *content, size_t pos, size_t len);bool GetContent(std::string *content);bool SetContent(const std::string &content);bool Exists();bool CreateDirectory();bool ScanDirectory(std::vector<std::string> *arry);
};
35. 客户端数据管理模块实现-数据管理类设计
class DataManager{private:std::unordered_map<std::string, std::string> _table;std::string _back_file;public:DataManager(const std::string back_file);bool InitLoad();//程序运行时加载以前的数据bool Storage();//持久化存储bool Insert(const std::string &key, const std::string &val);bool Update(const std::string &key, const std::string &val);bool GetOneByKey(const std::string &key, std::string *val);
};
36. 客户端文件备份模块实现-文件备份类设计
#define SRV_IP "192.168.X.X"
#define SRV_PORT 9000
class BackUp {private:DataManager *_data;std::string _back_dir;std::string _back_file;public:BackUp(const std::string &back_dir, const std::string &back_file): _back_dir(back_dir), _back_file(back_file){}std::string GetFileIdentifier(const std::string &filename);bool Upload(const std::string &filename);bool IsCanBeUpload(const std::string &filename);bool RunModule();};