#pragma once #include "../system/export.h" #include "Core/Statistics/Statistics.h" #include "spdlog/fmt/bundled/os.h" #include "spdlog/fmt/bundled/std.h" #include #include #include namespace Psc { // TODO: 采集文件 对应的 读取文件 回放 // TODO: 可以手动设置 刷新的按钮 // TODO: Text Shower 美化 class File_Gather_Simple { public: File_Gather_Simple() = default; void init(const std::string &path, size_t size); File_Gather_Simple(const std::string &path, size_t buffer_size); void append(const std::uint8_t *data, size_t size); ~File_Gather_Simple(); void flush(); private: std::string abs_path; std::ofstream ofs; std::string buffer; size_t buffer_size{}; }; class File_Player { public: File_Player() = default; explicit File_Player(const std::string &path); void open(const std::string &path); void close(); size_t read(std::uint8_t *buffer, size_t size); [[nodiscard]] bool eof() const; void rewind(); // 新增功能 [[nodiscard]] std::uint64_t total_size() const; [[nodiscard]] std::uint64_t current_offset(); [[nodiscard]] std::uint64_t remaining_size(); [[nodiscard]] double progress(); // 0.0 ~ 1.0 private: std::ifstream ifs; std::uint64_t total_size_{0}; }; class File_Gather { public: File_Gather() = default; ~File_Gather() = default; File_Gather(const std::string &path, size_t buffer_size); void init(const std::string &path, size_t buffer_size); void append(const std::uint8_t *data, size_t size); void flush() { gather_file.flush(); } Speed_Statistics append_speed; Value_Statistics append_value; protected: File_Gather_Simple gather_file; }; } // namespace Psc