52 lines
2.3 KiB
C
52 lines
2.3 KiB
C
|
|
#ifndef CCFileOutStream_H
|
||
|
|
#define CCFileOutStream_H
|
||
|
|
|
||
|
|
#include "CC.h"
|
||
|
|
|
||
|
|
#ifdef _WIN32
|
||
|
|
#include <tchar.h>
|
||
|
|
#endif
|
||
|
|
|
||
|
|
using CCOutStream = std::ofstream;
|
||
|
|
|
||
|
|
namespace CTL {
|
||
|
|
class FileOutStream final : public CCOutStream{
|
||
|
|
inline static std::map<String, std::mutex> mutexMap;
|
||
|
|
inline static std::mutex mapMutex; // 保护 mutexMap 的互斥量
|
||
|
|
String m_filename; // 存储文件名
|
||
|
|
std::vector<char> 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<unsigned char>& data);
|
||
|
|
void write(const char* data, size_t size);
|
||
|
|
// 写入部分字节数组
|
||
|
|
void write(const std::vector<unsigned char>& 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<char>& 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
|