EVC内存和文件交互

来源:互联网 发布:mac 重命名移动硬盘 编辑:程序博客网 时间:2024/06/05 18:29

//========================================================================
//TITLE:
//    EVC内存和文件交互
//AUTHOR:
//    norains
//DATE:
//    Saturday  13-May-2006
//========================================================================

    采用MFC的CFile类可以很方便实现将文件的数据读入内存,或者把内存的数据保存为文件.
   
/*************************************************************/
作用:将文件数据读入内存
szFilePath:读取的文件路径
pBaseBuf:写入的内存缓冲区
dwBufLen:写入的内存缓冲区长度
/*************************************************************/   
BOOL CopyFileDateToMem(CString szFilePath,PBYTE &pBaseBuf,DWORD &dwBufLen)
{
 CFile mFile(szFilePath,CFile::modeRead);
 dwBufLen=mFile.GetLength();
 pBaseBuf=(PBYTE)realloc (pBaseBuf, dwBufLen);
 if(pBaseBuf==NULL)
  return FALSE;
 mFile.Read(pBaseBuf,dwBufLen);
 mFile.Close();

 return TRUE;
}


/*************************************************************/
作用:将内存数据写入文件
pBaseBuf:读取的内存缓冲区
dwBufLen:读取的内存缓冲区长度
szFilePath:写入的文件路径
/*************************************************************/   
BOOL CopyMemDateToFile(PBYTE pBaseBuf, DWORD dwBufLen, CString szFilePath)
{
 CFile mFile(szFilePath,CFile::modeWrite|CFile::modeCreate);
 mFile.Write(pBaseBuf,dwBufLen);
 mFile.Flush();
 mFile.Close();
 return TRUE;
}


调用的方法也很简单,不过需要注意的是,在调用之前,需要对缓冲区进行初始化:
BOOL OnlyTest()
{
 DWORD m_dwReadBufLen;
 DWORD m_dwSaveBufLen;
 
  PBYTE m_pBaseReadBuf;
 PBYTE m_pBaseSaveBuf;

 m_pBaseReadBuf = reinterpret_cast<PBYTE>(malloc(1));
 m_pBaseSaveBuf = reinterpret_cast<PBYTE>(malloc(1));
 
 if(CopyFileDateToMem(L"test1.txt",m_pBaseReadBuf,m_dwReadBufLen))
 {
  return TRUE;
 }
 else
 {
   return FALSE;
 }
 
 if(CopyMemDateToFile(m_pBaseSaveBuf,m_dwSaveBufLen,L"test2.txt"))
 {
  return TRUE;
 }
 else
 {
   return FALSE;
 }
}