///////////////////////////////////////////////////////////////////////////////
//  CFile.h

#ifndef __CFILE_H__
#define __CFILE_H__

#include <stdio.h>
#include <string>
#include <vector>

namespace filesystem {
	
class CFile {
	FILE*	m_hFile;

	unsigned int	m_dwPos,
					m_dwSize;

public:
	CFile(void);
	virtual ~CFile();

	bool	Create(const std::string& FileName);
	bool	Open(const std::string& FileName);
	bool	Close(void);

	unsigned int	GetSize() const { return m_dwSize; }

	// 書き込み
	bool	Write(const void* pvData, int nSize);
	bool	WriteINT(int nData) { return Write(&nData, sizeof(int)); }
	bool	WriteByte(unsigned char byData) { return Write(&byData, sizeof(unsigned char)); }
	bool	WriteDWORD(unsigned int dwData) { return Write(&dwData, sizeof(unsigned int)); }

	bool	WritePosDWORD(int nPos, unsigned int dwData);

	bool	WriteString(const char* pszText, bool bWriteNul = true);

	// 読み込み
	bool	Read(void* pvData, int nSize);
	bool	ReadINT(int& nData) { return Read(&nData, sizeof(int)); }
	bool	ReadDWORD(unsigned int& dwData) { return Read(&dwData, sizeof(unsigned int)); }
	bool	ReadString(std::string& szText);

	static bool		ReadImage(std::vector<unsigned char>& Data, const std::string& FileName);
	static bool		ReadTextImage(std::string& Text, const std::string& FileName);
	static bool		WriteImage(const std::vector<unsigned char>& Data, const std::string& FileName);
	static bool		WriteTextImage(const std::string& Text, const std::string& FileName);

	// 位置
	bool	SetPos(unsigned int dwPos);
	unsigned int	GetPos() const { return m_dwPos; }

	bool	StepWritePos(int nSize);

	//
	static std::string	GetAppUserFolderPath();
	static std::string	TransRealFileName(const std::string& FileName);
};

}

#endif // __CFILE_H__

