//----------------------------------------------------------------------------
// cfile.h
//----------------------------------------------------------------------------
typedef enum{CA_CREATE,CA_ACCESS}CFILE_ATTRIBUTE;
class CFile{
protected:
HANDLE m_handle;
public:
CFile(LPSTR filename,CFILE_ATTRIBUTE attr = CA_ACCESS){
m_handle = NULL;
Open(filename,attr);}
CFile(){m_handle = NULL;}
~CFile(){Close();}
BOOL Open(LPSTR filename,CFILE_ATTRIBUTE attr = CA_ACCESS);
BOOL Open(){return m_handle != NULL;}
BOOL Create(LPSTR filename){return Open(filename,CA_CREATE);}
void Close();
DWORD GetSize(){return GetFileSize(m_handle,NULL);}
BOOL Seek(LONG offset,DWORD seek = FILE_BEGIN){
return (SetFilePointer(m_handle,offset,NULL,seek) != 0xFFFFFFFF);}
BOOL Begin(){return (SetFilePointer(m_handle,0,NULL,FILE_BEGIN) != 0xFFFFFFFF);}
BOOL Bottom(){return (SetFilePointer(m_handle,0,NULL,FILE_END) != 0xFFFFFFFF);}
DWORD GetSeek(){return SetFilePointer(m_handle,0,NULL,FILE_CURRENT);}
DWORD Read(LPVOID buf,DWORD size);
DWORD Write(LPVOID buf,DWORD size);
};
//----------------------------------------------------------------------------
// cfile.cpp
//----------------------------------------------------------------------------
BOOL CFile::Open(LPSTR filename,CFILE_ATTRIBUTE attr)
{
if(m_handle != NULL)Close();
DWORD a = ((attr == CA_CREATE) ? CREATE_NEW : 0) | ((attr == CA_ACCESS) ? OPEN_EXISTING : 0);
m_handle = CreateFile(filename,GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,a,
FILE_ATTRIBUTE_NORMAL,NULL);
if(m_handle == INVALID_HANDLE_VALUE){
m_handle = NULL;
return FALSE;
}
return TRUE;
}
void CFile::Close()
{
if(m_handle != NULL)CloseHandle(m_handle);
m_handle = NULL;
}
DWORD CFile::Read(LPVOID buf,DWORD size)
{
DWORD retsize = 0;
if(ReadFile(m_handle,buf,size,&retsize,NULL)){
return retsize;
}
return 0;
}
DWORD CFile::Write(LPVOID buf,DWORD size)
{
DWORD retsize = 0;
if(WriteFile(m_handle,buf,size,&retsize,NULL)){
return retsize;
}
return 0;
}
//
// 簡単なファイルアクセス(全部読む)
//
LPBYTE buf; // 格納先
CFile f;
if(f.Open("input.dat",CA_ACCESS)){ // 通常アクセスでオープン
buf = (LPBYTE)malloc(f.GetSize());
f.Read(buf,f.GetSize());
f.Close();
}
//
// 簡単なファイルアクセス2(出力)
//
LPBYTE buf; // 保存元
DWORD size; // bufのサイズ
CFile f;
if(f.Open("input.dat",CA_CREATE)){ // 新規ファイルでオープン
f.Write(buf,size);
f.Close();
}