📄 memoryfilestream.cpp
字号:
// MemoryFile.cpp: implementation of the CMemoryFile class.
//
//////////////////////////////////////////////////////////////////////
#include "../include/MemoryFileStream.h"
using namespace IMS_IO;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMemoryFileStream::CMemoryFileStream()
{
this->m_memFileHandler.pContent = NULL;
}
CMemoryFileStream::~CMemoryFileStream()
{
this->close();
}
/*
@param : char *pHandler
@param : int length
*/
bool CMemoryFileStream::open(const char *pHandler,int length,char *pFlag)
{
if(pHandler == NULL)
return false;
//复制一份内容到本地来
this->m_memFileHandler.nLength = length;
this->m_memFileHandler.pContent = new unsigned char[length];
memset(this->m_memFileHandler.pContent,0,length);
memcpy(this->m_memFileHandler.pContent,pHandler,length);
this->m_memFileHandler.bOPen = true;
this->m_memFileHandler.bClose = false;
return true;
}
int CMemoryFileStream::seek(long offset,int origin)
{
if(!this->m_memFileHandler.bOPen) //文件没有打开
return -1;
long nSeekedPos = 0;
switch(origin) // -2表示越界
{
case SEEK_SET:
nSeekedPos = offset;
break;
case SEEK_CUR:
nSeekedPos = offset + this->m_memFileHandler.nCurPos;
break;
case SEEK_END:
nSeekedPos = offset + this->m_memFileHandler.nLength;
break;
default:
return -3;
}
//确认移动后的位置还在存储区中
if(nSeekedPos >=0 && nSeekedPos < this->m_memFileHandler.nLength)
{
this->m_memFileHandler.nCurPos = nSeekedPos;
}else //越界
return -2;
return 0;
}
int CMemoryFileStream::read(void *pBuffer,int size,int count)
{
// ASSERT(pBuffer != NULL); //传入内容不可为空
if(!this->m_memFileHandler.bOPen) //文件没有打开
return -1;
long nReadedPos = this->m_memFileHandler.nCurPos + size * count;
if(nReadedPos <=0 || nReadedPos > this->m_memFileHandler.nLength) //越界了
return -2;
//读取内容
unsigned char *pTemp = this->m_memFileHandler.pContent;
pTemp += this->m_memFileHandler.nCurPos;
memcpy(pBuffer,pTemp,size * count);
//更该读取后的当前位置
this->m_memFileHandler.nCurPos = nReadedPos;
return size * count;
}
bool CMemoryFileStream::close()
{
if(!this->m_memFileHandler.bOPen)
return true;
this->m_memFileHandler.bClose = true;
this->m_memFileHandler.bOPen = false;
this->m_memFileHandler.nCurPos = 0;
this->m_memFileHandler.nLength = 0;
delete[] this->m_memFileHandler.pContent;
this->m_memFileHandler.pContent = NULL;
return true;
}
long CMemoryFileStream::length()
{
if(!this->m_memFileHandler.bOPen) //文件没有打开
return -1;
return this->m_memFileHandler.nLength;
}
long CMemoryFileStream::getPos()
{
return this->m_memFileHandler.nCurPos;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -