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

📄 mfile.cpp

📁 ADO查看数据库工具的原码
💻 CPP
字号:
// MFile.cpp: implementation of the CMFile class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
 
#include "MFile.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMFile::CMFile()
{
	m_buflen=0;
	m_Rseekpos=0;
	m_Wseekpos=0;
	m_pbuf=NULL;
	m_filelen=0;
}

CMFile::~CMFile()
{
	if (m_pbuf!=NULL) delete m_pbuf;
}

void CMFile::resizebuffer(int size)
{
	char *newbuf;
	int len;
	if (size>m_buflen) {
		len=(size/1024+1)*1024;
		newbuf = new char [len];
		if (m_pbuf!=NULL){
			memcpy(newbuf,m_pbuf,m_buflen);
			delete m_pbuf;
		}
		m_pbuf=newbuf;
		m_buflen=len;
	}
}

int CMFile::open(int mode ,char *buf,int size)
{
	m_mode = mode;
	switch(mode) {
	case MF_MODE_READ:
	case MF_MODE_APPEND:
		m_filelen=size;
		resizebuffer(size);
		write(buf,size);
		m_Rseekpos=0;
		m_Wseekpos=0;
		break;
	case MF_MODE_CREATE:
		if (size) {
			resizebuffer(size);
		}
		m_filelen=0;
		m_Rseekpos=0;
		m_Wseekpos=0;
	}
	return 0;
}

void CMFile::close()
{	
	m_Rseekpos=0; m_Wseekpos=0; 

}

int CMFile::read(char *buf, int size)
{
	 if (size >= m_filelen-m_Rseekpos ) return -1;
	 memcpy(buf,m_pbuf + m_Rseekpos,size);
	 m_Rseekpos+=size;
	 return size;
}

int CMFile::write(char *buf, int size)
{
	if (size >= m_buflen-m_Wseekpos ){
			resizebuffer(m_buflen+size);
	}
	if (m_Wseekpos+size > m_filelen) {
		m_filelen = m_Wseekpos+size;
	}
	
	memcpy(m_pbuf + m_Wseekpos,buf,size);

	m_Wseekpos+=size;
	m_Rseekpos+=size;
	return size;
}

int CMFile::seek(int pos, int mode)
{
	
	switch(mode){
			case SEEK_CUR:
				m_Wseekpos += pos;
				m_Rseekpos += pos;
				break;
			case SEEK_SET:
				m_Wseekpos = pos;
				m_Rseekpos = pos;
				break;
			case SEEK_END:
				m_Wseekpos = m_filelen;
				m_Rseekpos = m_filelen;
				break;
	}
	if (m_Rseekpos>=m_buflen) return -1;
	return 0;
}
int CMFile::tell()
{	return m_Rseekpos; }

char * CMFile::getcurdata()
{
	return m_pbuf + m_Rseekpos;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -