//=========================================================
#pragma once class CMyFile { public: CMyFile(); virtual ~CMyFile(void);
BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags) ; UINT Read(void* lpBuf, UINT nCount) ; DWORD Write(const void* lpBuf, UINT nCount) ;
HANDLE GetSafeHandle() {
if(!m_hFile)
return NULL; return m_hFile; } virtual __int64 GetLength() const;
int Close(); char* GetFileName();
private: HANDLE m_hFile; char* m_pFileName;
public: enum openMode { modeRead = 1, modeWrite = 2 }; };
//=========================================================
#include "StdAfx.h" #include "myfile.h" #include <assert.h>
CMyFile::CMyFile() : m_hFile(NULL), m_pFileName(NULL) { }
CMyFile::~CMyFile(void) { Close(); }
BOOL CMyFile::Open(LPCTSTR lpszFileName, UINT nOpenFlags) { Close();
DWORD dwDesiredAccess; DWORD dwCreationDisposition;
switch (nOpenFlags) { case modeRead: dwDesiredAccess = GENERIC_READ; dwCreationDisposition = OPEN_EXISTING; break; case modeWrite: dwDesiredAccess = GENERIC_WRITE; dwCreationDisposition = OPEN_ALWAYS; break; default: assert(false); }
HANDLE hFile = CreateFile(lpszFileName, dwDesiredAccess, 0,
NULL, dwCreationDisposition,
FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { m_hFile = hFile; m_pFileName = new char[strlen(lpszFileName) + 1]; strcpy(m_pFileName, lpszFileName);
return TRUE; } else { hFile = NULL; return FALSE; } }
int CMyFile::Close() { if (m_hFile) { CloseHandle(m_hFile); m_hFile = NULL; }
if (m_pFileName) { delete[] m_pFileName; m_pFileName = NULL; }
return 0; }
UINT CMyFile::Read(void* lpBuf, UINT nCount) { assert(m_hFile);
if (m_hFile) { DWORD nNumberOfBytesRead; if (ReadFile(m_hFile, lpBuf, nCount, &nNumberOfBytesRead, NULL)) { return (UINT) nNumberOfBytesRead; } }
return 0; }
DWORD CMyFile::Write(const void* lpBuf, UINT nCount) { assert(m_hFile);
DWORD dwReceive = 0; if (m_hFile) { WriteFile(m_hFile, lpBuf, nCount, &dwReceive, NULL); }
return dwReceive ; }
__int64 CMyFile::GetLength() const { if (!m_hFile) return 0;
ULARGE_INTEGER liSize = { 0, 0 }; liSize.LowPart = ::GetFileSize(m_hFile, &liSize.HighPart);
return (__int64) liSize.QuadPart; }
char* CMyFile::GetFileName() { return m_pFileName; }

|