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();
};