📄 libfile.cpp
字号:
#include "stdafx.h"
#include <afx.h>
#include "libFile.h"
//#include <windows.h>
//#include <iostream.h>
#include "Shlwapi.h"
#include "chaoge.h"
extern ULONG ulBeginAddr,ulEndAddr,ulSignAddr,ulCmpLen,ulLen;
extern CString csSignFileBuff;
unsigned int KMP_Find_Part(unsigned char*pSource,
unsigned char*pPart, unsigned int PrtLen)
{
unsigned int uiI=0;
unsigned char ucResult=0x00;
for(uiI=0; uiI<PrtLen; uiI++)
{
if(pSource[uiI] != pPart[uiI])
{
ucResult = 0x01;
break;
}
}
return ucResult;
}
unsigned int KMP_Find_Source(unsigned char*pSource,unsigned int ScLen,
unsigned char*pPart, unsigned int PrtLen,unsigned int*pIndex)
{
unsigned int uiI=0;
unsigned char aucMid[64];
unsigned char ucResult=0x02;
if(ScLen < PrtLen)
{
return ucResult;
}
for(uiI=0; uiI<ScLen-PrtLen+1; uiI++)
{
memset(aucMid,0,sizeof(aucMid));
memcpy(aucMid,&pSource[uiI], PrtLen);
ucResult = KMP_Find_Part(aucMid,pPart,PrtLen);
if(ucResult == 0)
{
*pIndex = uiI;
break;
}
}
if(ucResult != 0)
{
ucResult = 0x02;
}
return ucResult;
}
int Os_StringToHex(unsigned char * sIndata,unsigned int InLen,
unsigned char * OutData, unsigned int *OutLen)
{
unsigned char aucIndata[1024];
unsigned char aucOutBuf[3*1024];
unsigned int uiI=0,uiJ=0;
memset(aucIndata,0,sizeof(aucIndata));
memset(aucOutBuf,0,sizeof(aucOutBuf));
memcpy(aucIndata,sIndata, InLen);
for(uiI=0; uiI<InLen; uiI++)
{
if(uiI%16 == 0)
{
aucOutBuf[uiJ++] = 0x0D;
aucOutBuf[uiJ++] = 0x0A;
}
aucOutBuf[uiJ++] = ((aucIndata[uiI]&0xF0)>>4)+0x30;
aucOutBuf[uiJ++] = (aucIndata[uiI]&0x0F) + 0x30;
aucOutBuf[uiJ++] = ' ';
}
aucOutBuf[uiJ++] = 0x0D;
aucOutBuf[uiJ++] = 0x0A;
*OutLen = uiJ;
uiI =0;
while(uiI < uiJ)
{
if(aucOutBuf[uiI] >= 0x3A)
aucOutBuf[uiI] += 7;
uiI++;
}
memcpy(OutData,aucOutBuf,uiJ);
return 0;
}
int Os_CheckFileExist(CString sFile)
{
int iResult = ERR_FILE_NOTEXIST;
CFileStatus status;
if (CFile::GetStatus(sFile,status))
{
iResult = 0x00;
}
return iResult;
}
int Os_CreatFolder(CString sDirName)
{ //创建文件夹
int iResult = 0;
BOOL bFileFlag;
char aucDirName[MAX_PATH];
DWORD nLastErr;
memset( aucDirName,0,sizeof(aucDirName) );
strcpy( aucDirName,sDirName);
bFileFlag = CreateDirectory(aucDirName,NULL );//创建成功,返回值非0
if( !bFileFlag )
{
iResult = ERR_FILE_NOTEXIST;
nLastErr = GetLastError();
if( nLastErr != ERROR_ALREADY_EXISTS )
return nLastErr;
}
return iResult;
}
BOOL Os_CheckFolderExist(LPCTSTR lpszPath)
{
WIN32_FIND_DATA wfd;
BOOL bRet;
HANDLE hFind;
hFind = FindFirstFile(lpszPath,&wfd);
bRet =(hFind!=INVALID_HANDLE_VALUE)
&&(wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY);
FindClose(hFind);
return bRet;
}
//创建文件
int Os_CreatFile(CString sFile)
{
int iResult;
CStdioFile file;
iResult = ERR_FILE_NOTEXIST;
iResult = Os_CheckFileExist(sFile);
if(iResult != 0)
{
if(!file.Open(sFile,CFile::modeWrite|CFile::typeText) )
{
if(file.Open(sFile,CFile::modeCreate|CFile::modeWrite|CFile::typeText) )
{
iResult = 0x00;
}else
{
iResult = ERR_FILE_CREATERR;
}
}
file.Close();
}
return iResult;
}
int Os_ReadFile(CString sFile, char *sOutData,int *iOutLen)
{
int iResult = ERR_FILE_NOTEXIST;
CStdioFile file;
BYTE str[410];
DWORD m_nLen;
iResult = Os_CheckFileExist(sFile);
if(iResult == 0)
{
//读文件
if(file.Open(sFile, CFile::modeRead | CFile::typeText))
{
iResult = 0x00;
}else
{
iResult = ERR_FILE_OPENERR;
}
if(iResult == 0x00)
{
m_nLen = file.GetLength();
*iOutLen = m_nLen;
memset(str,0,sizeof(str));
file.Read(str,m_nLen);
memcpy(sOutData,str,m_nLen);
}
file.Close();
}
return iResult;
}
int Os_ReadFileByString(CString sFile)
{
int iResult = ERR_FILE_NOTEXIST;
unsigned int uiLineLen=0;
unsigned char aucLineBuf[50];
CStdioFile file;
CString str;
UINT uiOutDataLen=0;
UINT uiDataLen=0;
UCHAR aucLineAddr[5];
CString sAddr;
ULONG ulLineAddr;
CHAR aucOutData[255];//FILE_MAX_LEN
CString csData;
csData = "";
memset(aucOutData,0,sizeof(aucOutData));
iResult = Os_CheckFileExist(sFile);
if(iResult == 0)
{
//读文件
iResult = ERR_FILE_OPENERR;
if(file.Open(sFile, CFile::modeRead | CFile::typeText))
{
iResult = 0x00;
}
}
if(iResult == 0)
{
while(file.ReadString(str))
{
//行中的数据
uiLineLen = str.GetLength();
memset(aucLineBuf,0,sizeof(aucLineBuf));
memcpy(aucLineBuf,str.GetBuffer(0), uiLineLen);
//判断数据的长度,起始字节
iResult = 0X10;
if(uiLineLen >= 11)
{
iResult = 0X11;
if (aucLineBuf[0] == ':')
{
iResult = 0;
}
}
if (iResult == 0)
{
//该行数据的长度
uiDataLen = (aucLineBuf[1]-0x30)*16 + (aucLineBuf[2]-0x30);
//数据的地址
memset(aucLineAddr,0,sizeof(aucLineAddr));
memcpy(aucLineAddr,&aucLineBuf[3],4);
sAddr = aucLineAddr;
ulLineAddr = Os_ComputeAddr(sAddr);
//判断数据长度
iResult = 0x12;
if((ulLineAddr >= ulBeginAddr)
&& (ulLineAddr < ulEndAddr)
)
{
iResult = 0;
}else
{
iResult = 0xFF;
}
}
if (iResult == 0)
{
//取数据
if((aucLineBuf[7] == '0')
&& (aucLineBuf[8] == '0')
)
{
uiDataLen = uiDataLen*2;
//memset(&aucOutData[uiOutDataLen],0, uiDataLen);
//memcpy(&aucOutData[uiOutDataLen], &aucLineBuf[9], uiDataLen);
memset(&aucOutData[0],0, sizeof(aucOutData));
memcpy(&aucOutData[0],&aucLineBuf[9], uiDataLen);
csData = csData + aucOutData;
uiOutDataLen += uiDataLen;
}
}else break;
str = "";
}//end while
if((iResult==0)||(iResult == 0XFF)||(uiLineLen == 0))
{
//将数据导出
if (uiOutDataLen > 0)
{
//memcpy(sOutData,aucOutData,uiOutDataLen);
//*iOutLen = uiOutDataLen;
//csSignFileBuff = aucOutData;
csSignFileBuff = "";
csSignFileBuff = csData;
}
iResult = 0;
if (uiOutDataLen == 0)
{
iResult = 0XFE;
}
}
}
file.Close();
return iResult;
}
int Os_WriteFile(CString sFile, CString sInData,int InDataLen)
{
int iResult = ERR_FILE_NOTEXIST;
CStdioFile file;
//读文件
iResult = Os_CheckFileExist(sFile);
if(iResult == 0)
{
if(file.Open(sFile, CFile::modeWrite | CFile::typeText))
{
iResult = 0x00;
}else
{
iResult = ERR_FILE_OPENERR;
}
//清空文件中的数据
//file.SetLength(0);
file.SeekToEnd();
file.Write(sInData,InDataLen);
file.Close();
}
return iResult;
}
int Os_WriteFileHEX(CString sFile, unsigned char * pInData,int InDataLen)
{
int iResult = ERR_FILE_NOTEXIST;
CStdioFile file;
//读文件
iResult = Os_CheckFileExist(sFile);
if(iResult == 0)
{
if(file.Open(sFile, CFile::modeWrite | CFile::typeText))
{
iResult = 0x00;
}else
{
iResult = ERR_FILE_OPENERR;
}
//清空文件中的数据
//file.SetLength(0);
//将数据转化为HEX码形式写日志
unsigned char sOutData[3*1024];
unsigned int OutLen=0;
memset(sOutData,0,sizeof(sOutData));
Os_StringToHex(pInData,InDataLen,sOutData,&OutLen);
//sInData = sOutData;
file.SeekToEnd();
file.Write(sOutData,OutLen);
file.Close();
}
return iResult;
}
//对文件的匹配查找;
//TCP_PORT = 9001;
int Os_GetParameterString(CString sFileName,CString sMachOne,char* pOutData,int *iOutLen)
{
int iResult,uiI,iCompLen;
int iLen,iOffset,iBegin,iOLen;
char aucOutBuf[FILE_MAX_LEN];
char aucMbuf[20];
char aucMidOutBuf[30];
char aucMidBuf[FILE_MAX_LEN];
int uiJ=0;
iResult = Os_ReadFile(sFileName,aucOutBuf,&iLen);
if(iResult == 0)
{
//首先删除注释部分;
memset(aucMidBuf,0,FILE_MAX_LEN);
for(uiI=0; uiI < iLen ; uiI++)
{
if((aucOutBuf[uiI] == '/')&&(aucOutBuf[uiI+1] == '*'))
{
while(!((aucOutBuf[uiI] == '*')&&(aucOutBuf[uiI+1] == '/')))
{
uiI++;
}
uiI++;
}
if(((aucOutBuf[uiI] == '/')&&(aucOutBuf[uiI+1] == '/') )
||(aucOutBuf[uiI] == '#')
||(aucOutBuf[uiI] == '[')
)
{
while(aucOutBuf[uiI] != '\n')//((!((aucOutBuf[uiI] == 0x0D)&&(aucOutBuf[uiI+1] == 0x0A)))
{
uiI++;
}
uiI++;
}
aucMidBuf[uiJ++] = aucOutBuf[uiI];
}
memset(aucOutBuf,0,FILE_MAX_LEN);
memcpy(aucOutBuf,aucMidBuf,uiJ);
iLen = uiJ;
//比较字符串
iCompLen = strlen(sMachOne);
for(uiI=0; uiI < iLen ; uiI++)
{
memset(aucMbuf,0,sizeof(aucMbuf));
memcpy(aucMbuf,&aucOutBuf[uiI],iCompLen);
if(memicmp(aucMbuf, sMachOne,iCompLen) == 0) //strcmp
{
break;
}
}
//查找'='
iBegin = uiI+sizeof(sMachOne);
for(uiI=iBegin; uiI<iLen; uiI++)
if(aucOutBuf[uiI] == '=')
break;
//寻找起始字节
iBegin = uiI+1;
for(uiI=iBegin; uiI<iLen; uiI++)
if(aucOutBuf[uiI] != ' ')
break;
//计算数据长度
iBegin = uiI;
iOffset = uiI;
iOLen = 0;
for(uiI=iBegin; uiI<iLen; uiI++)
{
if(aucOutBuf[uiI] == ';')
break;
iOLen++;
}
//COPY 字符串
memset(aucMidOutBuf,0,30);
*iOutLen = iOLen;
memcpy(aucMidOutBuf,&aucOutBuf[iOffset],iOLen);
//*iOutLen = Os_TrimStr(aucMidOutBuf,pOutData);
int uiJ=0;
memset(aucMbuf,0,sizeof(aucMbuf));
//pOutData = aucMbuf;
for(uiI=0; uiI< (int)strlen(aucMidOutBuf); uiI++)
{
if(aucMidOutBuf[uiI]!=' ')
pOutData[uiJ++] = aucMidOutBuf[uiI];
}
*iOutLen = uiJ;
}
return iResult;
}
int Os_TrimStr(CString sInData,char *pOutData)
{
unsigned int uiI,uiJ=0;
char aucOutBuf[30];
for(uiI=0; uiI< strlen(sInData); uiI++)
{
//if(sInData[uiI]!=' ')
// aucOutBuf[uiJ++] = sInData[uiI];
}
memcpy(pOutData,aucOutBuf,uiJ);
return uiJ;
}
long Os_ComputeAddr(CString sInData)
{
long uiLen=0;
UCHAR aucOutBuf[5],aucLen[3];
memset(aucOutBuf,0,sizeof(aucOutBuf));
memcpy(aucOutBuf,sInData.GetBuffer(0), 4);
asc_hex(aucLen,2,aucOutBuf,4);
uiLen = aucLen[0]*256 + aucLen[1];
return uiLen;
}
int Os_GetFolderFileDir(CString sFolderName,CString sFileName,char* pOutData)
{
char aucDirName[60];
memset(aucDirName,0,sizeof(aucDirName));
memcpy(aucDirName,sFolderName,strlen(sFolderName));
aucDirName[strlen(sFolderName)] = '\\';
memcpy(&aucDirName[strlen(sFolderName)+1],sFileName,strlen(sFileName));
memcpy(pOutData,aucDirName,strlen(aucDirName));
return strlen(aucDirName);
}
UCHAR Conv(UCHAR Oct)
{
if (Oct >= 0x41)
return ( (Oct - 7) & 0x0F );
else
return ( Oct & 0x0F );
}
UCHAR *asc_hex(UCHAR *Ptd ,ULONG Ld,UCHAR *Pts,ULONG Ls)
{
ULONG I;
(VOID) memset( Ptd, 0x00, Ld ) ;
Ptd = Ptd + Ld - ((Ls + 1) / 2) ;
if ( Ls % 2 ) *Ptd++ = Conv(*Pts++) & 0x0F ;
for ( I = 0 ; I < (Ls / 2) ; I++)
{
*Ptd = (Conv(*Pts++) << 4) & 0xF0 ;
*Ptd = *Ptd + (Conv(*Pts++) & 0x0F) ;
Ptd ++;
}
return((UCHAR*)Ptd);
}
UCHAR *hex_asc(UCHAR * Ptd, UCHAR*Pts, UINT Lg)
{
UCHAR I, *Pt0;
Pt0 = Ptd;
if(Lg%2)*Ptd++ = (*Pts++&0x0F) + 0x30;
for(I=0; I < (Lg/2); I++)
{
*Ptd++ = ((*Pts&0xF0)>>4)+0x30;
*Ptd++ = (*Pts++&0x0F)+0x30;
}
while( Pt0 != Ptd)
{
if(*Pt0 >= 0x3A) *Pt0 += 7;
Pt0++;
}
return ((UCHAR*) Ptd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -