#ifndef CCFileOutStream_H #define CCFileOutStream_H #include "CC.h" #ifdef _WIN32 #include #endif using CCOutStream = std::ofstream; namespace CTL { class FileOutStream final : public CCOutStream{ inline static std::map mutexMap; inline static std::mutex mapMutex; // 保护 mutexMap 的互斥量 String m_filename; // 存储文件名 std::vector m_buffer; public: using std::ofstream::basic_ofstream; FileOutStream() = default; FileOutStream(CTL::String& filename, bool append = false); FileOutStream(CTL::String& Path,openmode mode); ~FileOutStream() override; // 写入单个字节 void write(unsigned char byte); // 写入字节数组 void write(const std::vector& data); void write(const char* data, size_t size); // 写入部分字节数组 void write(const std::vector& data, size_t offset, size_t length); void setBuffer(size_t size); bool open(const CTL::String& Path,openmode mode); //-------------------------------------------------------------------------------------------------------------- static void WriteFile(const CTL::String& filename, const CTL::String& content,openmode mode = std::ios::out | std::ios::binary); static void WriteFile(const CTL::String &filename, void* content, size_t size); static void Append(const CTL::String& filename, const std::vector& data,openmode mode = std::ios::app | std::ios::binary); static void Append(const CTL::String& filename, CTL::String data,openmode mode = std::ios::app | std::ios::binary); static void Append(const CTL::String& filename, CTL::ByteArray& data,openmode mode = std::ios::app | std::ios::binary); static void Append(const CTL::String& filename, void* content, size_t size); static void WriteAt(const CTL::String& filename, size_t position, const char* data, size_t size); //-------------------------------------------------------------------------------------------------------------- private: // 获取文件名 const String& getFilename() const { return m_filename; } }; } typedef CTL::FileOutStream CCFileOutStream; #endif