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

📄 licensefile.cpp

📁 跨操作系统的微型中间件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#ifdef WIN32#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>#include <memory.h>#include <errno.h>#include <ctype.h>#include "OSHeaders.h"#include "LicenseFile.h"#ifdef LINUX#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#endif#ifdef LINUXextern "C"{int CopyFile(const char* pszSourceFilename,const char* pszTargetFileName,bool bCancelOnExist){	int from_fd,to_fd; 	int bytes_read,bytes_write; 	char buffer[1024]; 	char *ptr; 	int flags;		if((from_fd=open(pszSourceFilename,O_RDONLY))==-1) 	{ 		return FALSE; 	} 	flags = O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR;	if (bCancelOnExist)		flags |= O_EXCL;		if((to_fd=open(pszTargetFileName ,flags))==-1) 	{ 		return FALSE; 	} 	while(bytes_read=read(from_fd,buffer,1024)) 	{ 		if((bytes_read==-1)&&(errno!=EINTR)) 			break; 		else if(bytes_read>0) 		{ 			ptr=buffer; 			while(bytes_write=write(to_fd,ptr,bytes_read)) 			{ 				if((bytes_write==-1)&&(errno!=EINTR))					break; 				else if(bytes_write==bytes_read) 					break; 				else if(bytes_write>0) 				{ 					ptr+=bytes_write; 					bytes_read-=bytes_write; 				} 			} 			if(bytes_write==-1)break; 				} 	} 	close(from_fd); 	close(to_fd); 	return TRUE;}int DeleteFile(const char* pszFilename){	return remove(pszFilename);}}#endifvoid ToLower( char * pszSrc, size_t len){    unsigned char    cb;    size_t  i;    if (NULL == pszSrc)    {        return;    }    for (i=0; i<len; i++)    {        cb = *(unsigned char *)(pszSrc + i);        if (cb >='A' && cb<='Z')        {            *(unsigned char *)(pszSrc + i) = (unsigned char)(cb + 32);        }    }}/*************************************************  Function:     LicenseConfigFile  Description:  LicenseConfigFile的构造函数,用于初始化类的成员变量,读取指定的配置文件。                如果文件读取成功,设置m_bIsOpen为TRUE  Calls:        LicenseConfigFile::OpenFile  Called By:    void ECManager::LoadModules()     Input:        pszFilename     - 以NULL结尾的配置文件名  Output:       无   Return:       无  Others:       *************************************************/LicenseConfigFile::LicenseConfigFile(const char *pszFilename){    memset(m_pszFilename, 0, 1024);    m_pszContent = NULL;    m_pszShadow = NULL;    m_nSize = 0;    m_bIsOpen = FALSE;    FILE *fb ,*fp;    int result1,result2;    size_t fileLen1 ,fileLen2;    char* tempFilename = new char [200];	memset(tempFilename, 0, 200);    memcpy(tempFilename,pszFilename,strlen(pszFilename) + 1);    strcat(tempFilename,"_");        if ((fb = fopen(tempFilename, "rb")) == NULL)    {        OpenFile(pszFilename);    }    else    {#ifdef AGENT_DEBUG        TERMDEBUGMSG(1,"打开设备配置文件 license.ini_ 成功!\n");#endif        result1 = fseek(fb, 0L, SEEK_END);        if (0 != result1)        {            fclose(fb);        }        fileLen1 = (size_t)ftell(fb);                /*如果文件长度为1024的倍数,备份文件失败,取原来的配置文件*/        if ((fileLen1 % 1024 ) == 0)        {            OpenFile(pszFilename);        }        else        {            if ((fp  = fopen(pszFilename, "rb")) == NULL)            {                fprintf(stdout,"打开设备配置文件 license.ini 失败!\n");            }            result2 = fseek(fp, 0L, SEEK_END);            if (0 != result2)            {                fclose(fp);            }            fileLen2 = (size_t)ftell(fp);            /*如果两个文件的长度绝对值相差小于256个字节,读取备份文件*/            if (abs((fileLen1 - fileLen2)) < 256)            {                /*用备份文件覆盖原来的配置文件*/                CopyFile(tempFilename,pszFilename,false);                fclose(fb);                /*删除备份文件*/                DeleteFile(tempFilename);                OpenFile(pszFilename);            }            else            {                OpenFile(pszFilename);            }        }    }    delete []tempFilename;}/*************************************************  Function:     OpenFile  Description:  读取指定的配置文件  Calls:        CloseFile();ToLower();  Called By:    LicenseConfigFile::LicenseConfigFile  Input:        pszFilename     - 以NULL结尾的配置文件名  Output:       无  Return:       无  Others:       *************************************************/void LicenseConfigFile::OpenFile(const char *pszFilename){	FILE    *fp;    size_t  len;    int     result;    /* 释放资源 */    CloseFile();		    if (NULL == pszFilename)    {        return;    }	if( (fp = fopen(pszFilename, "rb")) == NULL )	{		return;	}	else	{		fclose(fp);	}	strcpy(m_pszFilename, pszFilename);	SetFileReadWrite(m_pszFilename);    fp = fopen(m_pszFilename, "rb");    if (NULL == fp)    {        return;    }    result = fseek(fp, 0L, SEEK_END);    if (0 != result)    {        fclose(fp);        return;    }    len = (size_t)ftell(fp);	delete[] m_pszContent;	delete[] m_pszShadow;    m_pszContent = (char *)new char [len+1];    m_pszShadow = (char *)new char [len+1];    if ((NULL == m_pszContent) || (NULL == m_pszShadow))    {        fclose(fp);        return;    }    result = fseek(fp, 0L, SEEK_SET);    if (0 != result)    {        fclose(fp);        return;    }    m_nSize = fread(m_pszContent, 1, len, fp);    m_pszContent[m_nSize] = '\0';    /* 建立影子内存,里面存放全部是小写的字符串 */    memcpy(m_pszShadow, m_pszContent, m_nSize + 1);    ToLower(m_pszShadow, m_nSize + 1);    fclose(fp);    m_bIsOpen = TRUE;		SetFileReadOnly(m_pszFilename);}/*************************************************  Function:     CloseFile  Description:  读取指定的配置文件。   Calls:        free()  Called By:    LicenseConfigFile::~LicenseConfigFile  Input:        pszFilename     - 以NULL结尾的配置文件名  Output:         Return:       无  *************************************************/void LicenseConfigFile::CloseFile(){	SetFileReadWrite(m_pszFilename);    /* 释放资源 */    if (m_pszContent)    {        delete [] m_pszContent;        m_pszContent = NULL;    }    if (m_pszShadow)    {        delete [] m_pszShadow;        m_pszShadow = NULL;    }    m_nSize = 0;    m_bIsOpen = FALSE;	}/*************************************************  Function:     LicenseConfigFile::SetFileReadOnly  Description:  设置文件为只读属性   Calls:        GetStatus() SetStatus()   Called By:    LicenseConfigFile::SetItemValue()  Input:        const char * psFilename  Output:         Return:       成功:TRUE/失败:FALSE   *************************************************/unsigned long LicenseConfigFile::SetFileReadOnly(const char * psFilename){#if 0	char pFileName[1024] = { 0 };//File name and path	BYTE newAttribute = 0x01; //ReadOnly		strcpy(pFileName, psFilename);	CFileStatus filestatus;	CFile::GetStatus( pFileName, filestatus );	if (filestatus.m_attribute == newAttribute)	{		return TRUE;	}		filestatus.m_attribute = newAttribute;	CFile::SetStatus( pFileName, filestatus );#endif	return TRUE;}/*************************************************  Function:     LicenseConfigFile::SetFileReadWrite  Description:  设置文件为读写属性   Calls:        GetStatus() SetStatus()   Called By:    LicenseConfigFile::SetItemValue()  Input:        const char * psFilename  Output:         Return:       成功:TRUE/失败:FALSE   *************************************************/unsigned long LicenseConfigFile::SetFileReadWrite(const char * psFilename){#if 0    if ( *psFilename == 0 )    {        return FALSE;    }    char pFileName[1024] = { 0 };//File name and path

⌨️ 快捷键说明

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