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

📄 filefun.cpp

📁 通过GSM模块接收和发送短信的代码。在eVC4.0下编译通过
💻 CPP
字号:
#include "stdafx.h"

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

CFileFunction::CFileFunction()
{
	try
	{
#ifdef _DEBUG
		fCode.Open (TEXT("\\system.gps"),CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite);
#else
		fCode.Open (TEXT("\\Storage Card\\system.gps"),CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite);
#endif
		/*LPWSTR  m_Buffer;
		m_Buffer = (LPWSTR)malloc(2 * sizeof(WCHAR));
		m_Buffer[0]=0xFEFF;  //flag of UNICODE file
		fCode.Write (m_Buffer,2);
		free(m_Buffer);
		m_Buffer = NULL;*/
	}
	catch(...)
	{
		//i=0;
		MessageBox(NULL,TEXT("无法创建运营环境"),TEXT("系统警告信息"),MB_OK|MB_ICONWARNING);
	}
}

CFileFunction::CFileFunction(TCHAR path[])
{
	try
	{
		fCode.Open (path,CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite);
		LPWSTR  m_Buffer;
		m_Buffer = (LPWSTR)malloc(2 * sizeof(WCHAR));
		m_Buffer[0]=0xFEFF;  //flag of UNICODE file
		fCode.Write (m_Buffer,2);
		free(m_Buffer);
		m_Buffer = NULL;
	}
	catch(...)
	{
		//i=0;
		MessageBox(NULL,TEXT("无法创建运营环境"),TEXT("系统警告信息"),MB_OK|MB_ICONWARNING);
	}
}

CFileFunction::~CFileFunction()
{
	fCode.Close ();
}

/*
返回值:=-1没有找到
	    =-2内容过多
*/
int CFileFunction::ReadData(TCHAR title[],TCHAR name[],LPTSTR value)
{
	try
	{
		int iLocal;
		TCHAR ebuf[DATA_BUFF]=TEXT("\0");
		iLocal=SeekLocal (title);

		if (-2 == iLocal)//文件数据过多
		{
			return -2;
		}
		else if (-1 == iLocal)//第一次写数据:首先写标题,然后写键值
		{
			return -1;
		}
		else
		{
			//查询有没有相同的键值
			int sKey=0,eKey;
			sKey=SeekLocal(iLocal,name,eKey);
			if(-1 == sKey)//没有找到
			{
				return -1;
			}
			else if(-2 == sKey)//没有找到
			{
				return -2;
			}
			else if (-3 == sKey)//已经到达处于文件尾
			{
				//添加内容:从键值开始处写内容
				fCode.Seek(eKey,CFile::begin);
				//fCode.Write(TEXT("\r\n"),4);
				fCode.Read (ebuf,fCode.GetLength () - eKey);
				LPTSTR pstr;
				pstr=wcsstr(ebuf,TEXT("="));
				if (NULL == pstr)
				{
					return -1;
				}
				else
				{//找到数据
					wcsncpy(value,pstr+1,wcslen(pstr)-1);
					value[wcslen(pstr)-1]=0x0000;
					return 1;
				}
			}
			else
			{
				fCode.Seek(sKey,CFile::begin);
				wcscpy(ebuf,TEXT("\0"));
				fCode.Read (ebuf,eKey-sKey);
				LPTSTR pstr;
				pstr=wcsstr(ebuf,TEXT("="));
				if (NULL == pstr)
				{
					return -1;
				}
				else
				{//找到数据
					wcsncpy(value,pstr+1,wcslen(pstr)-1);
					value[wcslen(pstr)-1]=0x0000;
					return 1;
				}
			}
		}
		return 0;
	}
	catch(...)
	{
		MessageBox(NULL,TEXT("读文件错误"),TEXT("提示信息"),MB_OK);
		return 0;
	}
}

int CFileFunction::WriteData (TCHAR title[],TCHAR name[],TCHAR value[])
{
	try
	{
		int iLocal;
		TCHAR ebuf[DATA_BUFF]=TEXT("\0");
		wcscat(ebuf,title);
		iLocal=SeekLocal (title);
		wcscat(ebuf,TEXT("\0"));
		if (-2 == iLocal)//文件数据过多
		{
			return 0;
		}
		else if (-1 == iLocal)//第一次写数据:首先写标题,然后写键值
		{
			//记录标题
			fCode.SeekToEnd();
			fCode.Write(TEXT("\r\n"),4);
			fCode.Write(TEXT("["),2);
			fCode.Write (title,wcslen(title)*2);
			fCode.Write(TEXT("]"),2);
			
			//记录内容
			fCode.Write(TEXT("\r\n"),4);
			fCode.Write (name,wcslen(name)*2);
			fCode.Write(TEXT("="),2);
			fCode.Write (value,wcslen(value)*2);
		}
		else
		{
			//查询有没有相同的键值
			int sKey=0,eKey;
			sKey=SeekLocal(iLocal,name,eKey);
			if(-1 == sKey)//没有找到
			{
				//保存后续内容
				fCode.Seek(iLocal,CFile::begin);
				fCode.Read (ebuf,fCode.GetLength () - iLocal);
				fCode.Seek(iLocal,CFile::begin);
				
				//添加内容
				fCode.Write(TEXT("\r\n"),4);
				fCode.Write (name,wcslen(name)*2);
				fCode.Write(TEXT("="),2);
				fCode.Write (value,wcslen(value)*2);
				
				//保存后面内容
				fCode.Write(ebuf,fCode.GetLength () - iLocal);
			}
			else if(-2 == sKey)//文件数据过多
			{
				return 0;
			}
			else if (-3 == sKey)//已经到达处于文件尾
			{
				//添加内容:从键值开始处写内容
				fCode.Seek(eKey,CFile::begin);
				//fCode.Write(TEXT("\r\n"),4);
				fCode.Write (name,wcslen(name)*2);
				fCode.Write(TEXT("="),2);
				fCode.Write (value,wcslen(value)*2);
				fCode.SetLength (eKey+(wcslen(name)+wcslen(value))*2+2);//强制截断文件
			}
			else
			{
				//保存后面内容我
				fCode.Seek(eKey,CFile::begin);
				fCode.Read (ebuf,fCode.GetLength () - eKey);
				
				//添加内容
				fCode.SetLength (sKey);//强制截断文件
				fCode.Seek(sKey,CFile::begin);
				fCode.Write (name,wcslen(name)*2);
				fCode.Write(TEXT("="),2);
				fCode.Write (value,wcslen(value)*2);
				//fCode.Write(TEXT("\r\n"),4);
				fCode.SetLength (sKey+(wcslen(name)+wcslen(value))*2+2);//强制截断文件
				
				//保存后面内容
				fCode.Write(ebuf,wcslen(ebuf)*2);
			}
		}
		return 0;
	}
	catch(...)
	{
		MessageBox(NULL,TEXT("写文件错误"),TEXT("提示信息"),MB_OK);
		return 0;
	}
}
/*
返回值:=-1:没有找到
        =-2:内容太多
*/
int CFileFunction::SeekLocal(TCHAR title[])
{
	fCode.SeekToBegin ();
	TCHAR buf[DATA_BUFF]=TEXT("\0");
	if (DATA_BUFF < fCode.GetLength())//数据内容太多
		return -2;

	fCode.Read(buf,fCode.GetLength());
	LPTSTR pstr;
	int iLocal;
	pstr=wcsstr(buf,title);
	if (NULL == pstr)//没有找到
	{
		iLocal=-1;
	}
	else
	{
		iLocal=(wcslen(buf)-wcslen(pstr)+wcslen(title))*2+2;
	}

	return iLocal;
}
/*
返回值:=-1:没有找到
        =-2:内容太多
		=-3:已经到达处于文件尾
*/ 
int CFileFunction::SeekLocal(int iLocal,TCHAR name[],int &overRet)
{
	try
	{
		overRet=0;
		fCode.Seek (iLocal,CFile::begin);//定位到SeekLocal()检索的位置
		TCHAR buf[DATA_BUFF]=TEXT("\0");
		if (DATA_BUFF < fCode.GetLength())//内容太多
			return -2;

		fCode.Read(buf,fCode.GetLength()-iLocal);
		LPTSTR pstr;
		int iRet;
		TCHAR ebuf[DATA_BUFF]=TEXT("\0");
		pstr=wcsstr(buf,name);//查找键值
		if (NULL == pstr)//没有找到
		{
			iRet=-1;
		}
		else
		{
			wcscpy(ebuf,pstr);
			wcsncpy(buf,buf,wcslen(buf)-wcslen(pstr));
			buf[wcslen(buf)-wcslen(pstr)]=0x0000;
			pstr=wcsstr(buf,TEXT("["));//开始检测是否为本类别键值
			if (NULL == pstr)//没有 [ 说明为本类别键值
			{
				pstr=wcsstr(ebuf,TEXT("\r\n"));//结束位置
				if (NULL == pstr)//已经是文件尾
				{
					overRet=iLocal+wcslen(buf)*2;//键值计算开始位置,而不再是键值结束位置
					iRet=-3;
				}
				else
				{
					iRet=iLocal+wcslen(buf)*2;//键值开始位置
					overRet=iRet+(wcslen(ebuf)-wcslen(pstr))*2;//简直结束位置
				}
			}
			else//不是本类别的键值
			{
				iRet=-1;//没有找到
			}
		}

		return iRet;
	}
	catch(...)
	{
		MessageBox(NULL,TEXT("不是本类别的键值"),TEXT("不是本类别的键值"),MB_OK);
	}
	return -1;
}

⌨️ 快捷键说明

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