www.pudn.com > BAV.v2.rar > FileObject.cpp, change:2005-08-21,size:2524b
#include "StdAfx.h"
#include ".\fileobject.h"
CFileObject::CFileObject(void)
{
m_eObjType = BO_PHY_FILE;
m_hFile = INVALID_HANDLE_VALUE;
m_dwObjSize = 0;
}
CFileObject::CFileObject(CFileObject& cFileObj)
{
m_eObjType = BO_PHY_FILE;
m_hFile = INVALID_HANDLE_VALUE;
m_dwObjSize = cFileObj.m_dwObjSize;
m_strObjName= cFileObj.m_strObjName;
}
CFileObject::~CFileObject(void)
{
if(m_hFile!=INVALID_HANDLE_VALUE)
Close();
}
bool CFileObject::SetObjectName(CString* pstrName)
{
ASSERT(pstrName);
if(pstrName==NULL)
return false;
m_strObjName = *pstrName;
return true;
}
PCSTR CFileObject::GetObjectName()
{
return (PCSTR)m_strObjName;
}
bool CFileObject::Open(bool bScan)
{
DWORD dwDesiredAccess, dwShareMode;
if(bScan)
{
dwDesiredAccess = GENERIC_READ;
dwShareMode = FILE_SHARE_WRITE;
}
else
{
dwDesiredAccess = GENERIC_WRITE;
dwShareMode = FILE_SHARE_DELETE;
}
m_hFile = ::CreateFile(m_strObjName, dwDesiredAccess, dwShareMode, NULL, OPEN_EXISTING, 0, NULL);
m_dwObjSize = GetFileSize(m_hFile, NULL);
return m_hFile != INVALID_HANDLE_VALUE;
}
bool CFileObject::Close()
{
bool bRet = ::CloseHandle(m_hFile)==TRUE;
m_hFile = INVALID_HANDLE_VALUE;
return bRet;
}
bool CFileObject::Compare(IN INT nOffset, IN INT dwSize, IN LPBYTE pSignature, IN BAV_SIGN_LOGIC_OPERATION eLogicOp)
{
ASSERT(m_eObjType==BO_PHY_FILE);
ASSERT(dwSize=MAX_SIGNATURE_LEN);
if(!IsOpened())
{
ASSERT(false);
return false;
}
// Signature position exceed the file size
if( (nOffset+dwSize)>(INT)m_dwObjSize )
return false;
if(INVALID_SET_FILE_POINTER==::SetFilePointer(m_hFile, nOffset, NULL, FILE_BEGIN))
return false;
// read and compare
BYTE fbuf[MAX_SIGNATURE_LEN];
DWORD dwReadBytes;
if( ::ReadFile(m_hFile, fbuf, dwSize, &dwReadBytes, NULL) && dwReadBytes==dwSize)
{
int nRet = memcmp(fbuf, pSignature, dwSize);
switch(eLogicOp)
{
case BL_EQUAL:
return nRet==0;
case BL_NOT_EQUAL:
return nRet!=0;
default:
ASSERT(false);
}
}
return false;
}
bool CFileObject::Compare(IN LPBYTE pData, IN INT nSize, IN LPBYTE pSignature, IN BAV_SIGN_LOGIC_OPERATION eLogicOp)
{
// CFileObject not support this
ASSERT(false);
return false;
}
bool CFileObject::IsOpened()
{
return m_hFile!=INVALID_HANDLE_VALUE;
}
BAV_OBJ_TYPE CFileObject::GetObjectType()
{
return m_eObjType;
}
DWORD CFileObject::GetObjectSize()
{
return m_dwObjSize;
}