⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memoryfilestream.cpp

📁 自己写的一个IO库
💻 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 + -