您的位置:首页 > 其它

文件写入读取和宽字符多字节字符间转换

2012-06-07 09:43 1251 查看
// SystemFileControl.h: interface for the CSystemFileControl class.

//

//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SYSTEMFILECONTROL_H__2B1F6337_5FC2_4CC5_A8B2_B1164D0D38D2__INCLUDED_)

#define AFX_SYSTEMFILECONTROL_H__2B1F6337_5FC2_4CC5_A8B2_B1164D0D38D2__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

class CSystemFileControl

{

public:

CFile fp;

int file_open_type;

CSystemFileControl();

virtual ~CSystemFileControl();

public:

void OpenFile(int openType);

void CloseFile(void);

//*********************系统信息文件结构设置函数*********************//

void SetSYSFILEFlag();//设置信息文件的文件头

void SetHospitalName(CString str);//设置医院名称

void SetHospitalAddress(CString str);//设置医院地址

void SetHospitalPhone(CString str);//设置医院电话

//================系统信息文件信息相关读取函数======================//

int GetSYSFILEFlag(void *lpBuf);//获得系统信息文件的文件头信息

CString GetHospitalName(); //获得医院名称

CString GetHospitalAddress(); //获得医院地址

CString GetHospitalPhone(); //获得医院电话

private:

void CreateNewFile();

};

#endif // !defined(AFX_SYSTEMFILECONTROL_H__2B1F6337_5FC2_4CC5_A8B2_B1164D0D38D2__INCLUDED_)

// SystemFileControl.cpp: implementation of the CSystemFileControl class.

//

//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "Tele-cardiogram.h"

#include "SystemFileControl.h"

#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif

#define File_Create_Write 0

#define File_Write_Read 1

#define File_Only_Write 2

#define File_Only_Read 3

//////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////

CSystemFileControl::CSystemFileControl()

{

file_open_type=0;

}

CSystemFileControl::~CSystemFileControl()

{

}

void CSystemFileControl::OpenFile(int OpenType)

{

BOOL bOk=TRUE;

CString filename;

CString str;

filename="D:\\GY-TELEECG\\SYSFILE.sys";//

switch(OpenType)

{

case 1:

bOk=fp.Open(filename,CFile::modeCreate|CFile::modeWrite);

file_open_type=File_Create_Write;

if(bOk)

SetSYSFILEFlag();

break;

case 2:

bOk=fp.Open(filename,CFile::modeReadWrite);

file_open_type=File_Write_Read;

break;

case 3:

bOk=fp.Open(filename,CFile::modeWrite);

file_open_type=File_Only_Write;

break;

case 4:

bOk=fp.Open(filename,CFile::modeRead);

file_open_type=File_Only_Read;

break;

default:

str=_T("File Doesn't Open!!!");

str=_T("SYSFILE.sys ")+str;

AfxMessageBox(str,MB_OK,0);

return;

break;

}

if(!bOk)

{

if(OpenType==1)

{

str=_T("请在工作目录下运行本应用程序!");

AfxMessageBox(str,MB_OK,0);

exit(0);

}

CreateNewFile();

exit(0);

}

}

void CSystemFileControl::CloseFile()

{

fp.Close();

}

//****************************系统信息文件结构设置函数*********************//

void CSystemFileControl::SetSYSFILEFlag()//设置信息文件的文件头

{

int FileHead_Zero[32];//64字节

fp.Seek(0,CFile::begin);

fp.Write(FileHead_Zero,128);//字

fp.Write("SYSTEM",6);

fp.Write(FileHead_Zero,2);

}

void CSystemFileControl::CreateNewFile()

{

CString str;

//int length;

str=_T("File Can't Open!!!");

str=_T("SYSFILE.sys")+str+_T("\n系统将尝试自动修复!");

AfxMessageBox(str,MB_OK,0);

OpenFile(1);

str=_T("");

SetHospitalName(str);

SetHospitalAddress(str);

SetHospitalPhone(str);

fp.SetLength(500);

CloseFile();

}

void CSystemFileControl::SetHospitalName(CString strHospitalName)//设置医院名称

{

/***********************************

宽字符转换成多字节字符,存取汉字

***********************************/

//获取字符串在多字节下的长度

int dwNum = WideCharToMultiByte(CP_OEMCP,NULL,strHospitalName,-1,NULL,0,NULL,FALSE);

char *psNameText;//多字节字符串buffer

psNameText = new char[dwNum];

if(!psNameText)

{

delete []psNameText;

exit(0);

}

//宽字符转换成多字节字符

WideCharToMultiByte (CP_OEMCP,NULL,strHospitalName,-1,psNameText,dwNum,NULL,FALSE);

fp.Seek(160,CFile::begin);//定位文件,确定写入位置

fp.Write(&dwNum,4); //写入医院名称在多字节下的大小

fp.Write(psNameText,dwNum); //写入医院名称

delete []psNameText;

}

void CSystemFileControl::SetHospitalAddress(CString strHospitalAddr)//设置医院地址

{

fp.Seek(224,CFile::begin);//定位文件,确定写入位置

/***********************************

宽字符转换成多字节字符,存取汉字

***********************************/

//获取字符串在多字节下的长度

DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,strHospitalAddr,-1,NULL,0,NULL,FALSE);

char *psNameText;//多字节字符串buffer

psNameText = new char[dwNum];

if(!psNameText)

{

delete []psNameText;

exit(0);

}

//宽字符转换成多字节字符

WideCharToMultiByte (CP_OEMCP,NULL,strHospitalAddr,-1,psNameText,dwNum,NULL,FALSE);

fp.Write(&dwNum,4); //写入医院名称在多字节下的大小

fp.Write(psNameText,dwNum); //写入医院名称

delete []psNameText;

}

void CSystemFileControl::SetHospitalPhone(CString strHospitalPhone)//设置医院电话

{

fp.Seek(384,CFile::begin);//定位文件,确定写入位置

/***********************************

宽字符转换成多字节字符,存取汉字

***********************************/

//获取字符串在多字节下的长度

DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,strHospitalPhone,-1,NULL,0,NULL,FALSE);

char *psNameText;//多字节字符串buffer

psNameText = new char[dwNum];

if(!psNameText)

{

delete []psNameText;

exit(0);

}

//宽字符转换成多字节字符

WideCharToMultiByte (CP_OEMCP,NULL,strHospitalPhone,-1,psNameText,dwNum,NULL,FALSE);

fp.Write(&dwNum,4); //写入医院名称在多字节下的大小

fp.Write(psNameText,dwNum); //写入医院名称

fp.SetLength(500);

delete []psNameText;

}

int CSystemFileControl::GetSYSFILEFlag(void *lpBuf)//获得系统信息文件的文件头信息

{

int nCount;

fp.Seek(128,CFile::begin);

nCount=fp.Read(lpBuf,5);

return nCount;

}

CString CSystemFileControl::GetHospitalName()//获得医院名称及其名称长度

{

int nCount=0;//医院名称在多字节下的长度

/***********************************************************/

/* 文件总长度,应该为500,否则文件读取出错 */

/***********************************************************/

int FileSize;

FileSize=fp.GetLength();

if(FileSize!=500)

{

CloseFile();

CreateNewFile();

exit(0);

}

/****************************************/

/* 读取文件 */

/*****************************************/

fp.Seek(160,CFile::begin);

fp.Read(&nCount,4);

char *cTxt;

cTxt= new char[nCount];

fp.Read(cTxt,nCount);

/****************************************/

/* 多字节到宽字节的转换 */

/*****************************************/

DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, cTxt, -1, NULL, 0);//宽字节下的医院名称的长度

wchar_t *pwNameText;

pwNameText = new wchar_t[dwNum];

if(!pwNameText)

{

delete []pwNameText;

}

MultiByteToWideChar (CP_ACP, 0, cTxt, -1,pwNameText , dwNum);

/****************************************/

/* 返回宽字节下的医院名称 */

/*****************************************/

CString strHospitalName=pwNameText;

delete []cTxt;

delete []pwNameText;

return strHospitalName;

}

CString CSystemFileControl::GetHospitalAddress()//获得医院地址

{

int nCount=0;//医院地址在多字节下的长度

/***********************************************************/

/* 文件总长度,应该为500,否则文件读取出错 */

/***********************************************************/

int FileSize;

FileSize=fp.GetLength();

if(FileSize!=500)

{

CloseFile();

CreateNewFile();

exit(0);

}

/****************************************/

/* 读取文件 */

/*****************************************/

fp.Seek(224,CFile::begin);

fp.Read(&nCount,4);

char *cTxt;

cTxt= new char[nCount];

fp.Read(cTxt,nCount);

/****************************************/

/* 多字节到宽字节的转换 */

/*****************************************/

DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, cTxt, -1, NULL, 0);//宽字节下的医院地址的长度

wchar_t *pwNameText;

pwNameText = new wchar_t[dwNum];

if(!pwNameText)

{

delete []pwNameText;

}

MultiByteToWideChar (CP_ACP, 0, cTxt, -1,pwNameText , dwNum);

/****************************************/

/* 返回宽字节下的医院地址 */

/*****************************************/

CString strHospitalAddr=pwNameText;

delete []cTxt;

delete []pwNameText;

return strHospitalAddr;

}

CString CSystemFileControl::GetHospitalPhone()//获得医院电话

{

int nCount=0;//医院电话在多字节下的长度

/***********************************************************/

/* 文件总长度,应该为500,否则文件读取出错 */

/***********************************************************/

int FileSize;

FileSize=fp.GetLength();

if(FileSize!=500)

{

CloseFile();

CreateNewFile();

exit(0);

}

/****************************************/

/* 读取文件 */

/*****************************************/

fp.Seek(384,CFile::begin);

fp.Read(&nCount,4);

char *cTxt;

cTxt= new char[nCount];

fp.Read(cTxt,nCount);

/****************************************/

/* 多字节到宽字节的转换 */

/*****************************************/

DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, cTxt, -1, NULL, 0);//宽字节下的医院电话的长度

wchar_t *pwNameText;

pwNameText = new wchar_t[dwNum];

if(!pwNameText)

{

delete []pwNameText;

}

MultiByteToWideChar (CP_ACP, 0, cTxt, -1,pwNameText , dwNum);

/****************************************/

/* 返回宽字节下的医院电话 */

/*****************************************/

CString strHospitalPhone=pwNameText;

delete []cTxt;

delete []pwNameText;

return strHospitalPhone;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐