123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #pragma once
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <vector>
- #include <memepp/native.hpp>
- #define NOMINMAX // max()无法识别问题是由于与 Windows.h 头文件中的宏定义产生了冲突而导致的编译错误。
- #include "ghc/filesystem.hpp"
- class DataStorageMgmt
- {
- public:
- DataStorageMgmt();
- ~DataStorageMgmt();
- //初始化存储,创建数据存储文件句柄
- void init_data_storage(memepp::native_string & folderPath, const uint8_t deviceId);
-
- //保存数据到文件
- void save_data_to_file(const uint8_t data[], const size_t dataSize, const uint64_t timestamp);
- //获取时间戳范围内的历史数据文件,并返回开始时间和结束时间
- void get_history_file_list(uint64_t& startTime, uint64_t& endTime, std::vector<ghc::filesystem::path>& hisDataPath);
- //根据时间范围,读取历史数据(总召数据)
- void read_history_data(const ghc::filesystem::path filePath, std::vector<uint8_t>& historyData);
- //当网关离线的时候,创建离线文件
- void create_offline_data_file();
- //保存离线文件
- void save_offline_data_to_file(const uint8_t data[], const size_t dataSize);
- //获取所有离线数据文件路径,等待发送
- void get_offline_flie_list(std::vector<ghc::filesystem::path>& offlineDataPath);
- //读取离线数据
- void read_offline_data(const ghc::filesystem::path filePath, std::vector<std::vector<uint8_t>>& cache);
- //过了12点到了第二天,需要重新初始化
- void to_new_day();
- //检查是否小时变化,需要重新创建离线文件
- void check_to_next_hour();
- //停止存储离线数据
- void stop_save_offline();
- private:
- //删除大于缓存周期的文件
- void delete_out_date_file(const memepp::native_string dataFolderPath, uint16_t max_days);
- memepp::native_string get_earliest_file(memepp::native_string folderPath);
- std::string get_last_filename(memepp::native_string folderPath);
- void remove_file(memepp::native_string filePath);
- private:
- //存储数据的文件夹路径
- memepp::native_string m_folderPath;
- //历史数据
- std::fstream m_history_data_fs;
- //存储数据文件数据的目录
- memepp::native_string m_history_folder;
- memepp::native_string m_history_folder_today;
- //离线数据操作句柄,用于断点续传功能
- std::fstream m_offline_file_fs;
- //离线数据文件夹
- memepp::native_string m_offline_folder;
- //离线数据文件夹,每天创建一个新文件夹
- memepp::native_string m_offline_folder_today;
- //记录创建文件的时间,1个小时创建一个文件
- memepp::native_string m_strDateTime;
- //标识当前小时内第几个离线文件
- uint16_t offline_data_file_index;
- //存储大于90%以上,就不再存储数据,该状态由应用去判断
- bool isCanSave;
- };
|