//得到pLine中分隔符的个数
int getNumOfSepFlag(char* pLine){int iNumofSepFlag = 0;char* pTmp2 = NULL;char* pTmp1 = pLine;
while ((pTmp2 = strstr(pTmp1, SeparateFlag)) != NULL){ iNumofSepFlag++;  pTmp1 = pTmp2 + 1; }
return iNumofSepFlag;}
TBool getWorkPath(int iNodeIndex, char* sCurPath){if (NULL == sCurPath) { y2;}
if (ACCOUNT == y8.m_iNodeType){ sprintf(sCurPath, "%s/%s",  TRANSBALANCEACCOUNT_DIR, y8.m_sNodeNo);
}else  {sprintf(sCurPath, "%s/%s",TRANSBALANCEOSS_DIR, y8.m_sNodeNo);}y1;}
TBool CompensateFileOper(int iNodeIndex, char* pcCheckDate,char* pcLogSerial, char* pcFileName,
 TCompensateResult eResult){z3 j1;z3 szDestFileName;z3 szTmpString;char szSuffix[7];
 memset(szSuffix, 0, 7);memcpy(szSuffix, pcFileName + strlen(pcFileName) - 6, 6);
 memset(szTmpString, 0, sizeof(szTmpString));if (0 == strcmp(szSuffix, "_retry")) {
 memcpy(szTmpString, pcFileName, strlen(pcFileName) - 6);} else{ strcpy(szTmpString, pcFileName);}
switch (y8.m_iNodeType){case ACCOUNT: sprintf(j1, "%s/%s/%s", TRANSBALANCEACCOUNT_DIR,y8.m_sNodeNo,
  pcFileName);break;case BANK:  sprintf(j1, "%s/%s/%s", TRANSBALANCEBANK_DIR,y8.m_sNodeNo, pcFileName);
 break;}char sCurDate[DateFieldLength + 1];char sCurTime[TimeFieldLength + 1];getCurDateAndTime(
 sCurDate, sCurTime);sprintf(szDestFileName, "%s/%s_%s%s%s%s%s", TRANSBALANCECOMPENSATE_DIR, szTmpString,
 y8.m_sNodeNo,pcCheckDate, pcLogSerial,sCurDate, sCurTime);switch (eResult){ case COMPENSATE_SUCCEED:
 case COMPENSATE_FAILED:case COMPENSATE_FILENAME_ERROR:case COMPENSATE_HEAD_INCORRECT:
//文件名不正确、文件头不正确等,不重试。y2; case COMPENSATE_FILE_ERROR:{ //文件错误时,要重试整个文件。
if (access(j1, F_OK | R_OK) == 0){char szCommand[1024];if (0 == strcmp(szSuffix, "_retry")){
sprintf(szCommand, "mv %s %s 1>/dev/null 2>&1", j1, szDestFileName); } else {sprintf(szCommand, 
"cp %s %s 1>/dev/null 2>&1",j1, szDestFileName);}if (system(szCommand) != 0) {ERRORLOG; y2;  } } else
 {  ERRORLOG;  y2; }} break;case COMPENSATE_EXP_FAILED: case COMPENSATE_UNLOCK_FAILED:
//case COMPENSATE_SENDBILLS_FAILD:  因为有消息交互,且现网无应用,暂不处理。如果要重试,需要在主进程中处理。
{//在获取文件头后,要将文件头中的笔数字修改为0,以避免重复统计。 z3 szFileHead;FILE* pfSrcFile = 
fopen(j1, "r");if (NULL == pfSrcFile){ERRORLOG; y2;}if (NULL == fgets(szFileHead, LengthOfGeneralString, 
pfSrcFile)){ERRORLOG;fclose(pfSrcFile);y2;}fclose(pfSrcFile);memset(szFileHead + strlen(szFileHead) - 10
, '0', 10);FILE* pfDestFile = fopen(szDestFileName, "w+");if (NULL == pfDestFile){ ERRORLOG; y2;}
if (fputs(szFileHead, pfDestFile) < 0){ERRORLOG;fclose(pfDestFile); y2;}fclose(pfDestFile);
if (0 == strcmp(szSuffix, "_retry")){ unlink(j1); } } break; default: y2; } y1;}

解决方案 »

  1.   

    //得到pLine中分隔符的个数
    int getNumOfSepFlag(char* pLine){int iNumofSepFlag = 0;char* pTmp2 = NULL;char* pTmp1 = pLine;
    while ((pTmp2 = strstr(pTmp1, SeparateFlag)) != NULL){ iNumofSepFlag++;  pTmp1 = pTmp2 + 1; }
    return iNumofSepFlag;}
    TBool getWorkPath(int iNodeIndex, char* sCurPath){if (NULL == sCurPath) { y2;}
    if (ACCOUNT == y8.m_iNodeType){ sprintf(sCurPath, "%s/%s",  TRANSBALANCEACCOUNT_DIR, y8.m_sNodeNo);
    }else  {sprintf(sCurPath, "%s/%s",TRANSBALANCEOSS_DIR, y8.m_sNodeNo);}y1;}
    TBool CompensateFileOper(int iNodeIndex, char* pcCheckDate,char* pcLogSerial, char* pcFileName,
     TCompensateResult eResult){z3 j1;z3 szDestFileName;z3 szTmpString;char szSuffix[7];
     memset(szSuffix, 0, 7);memcpy(szSuffix, pcFileName + strlen(pcFileName) - 6, 6);
     memset(szTmpString, 0, sizeof(szTmpString));if (0 == strcmp(szSuffix, "_retry")) {
     memcpy(szTmpString, pcFileName, strlen(pcFileName) - 6);} else{ strcpy(szTmpString, pcFileName);}
    switch (y8.m_iNodeType){case ACCOUNT: sprintf(j1, "%s/%s/%s", TRANSBALANCEACCOUNT_DIR,y8.m_sNodeNo,
      pcFileName);break;case BANK:  sprintf(j1, "%s/%s/%s", TRANSBALANCEBANK_DIR,y8.m_sNodeNo, pcFileName);
     break;}char sCurDate[DateFieldLength + 1];char sCurTime[TimeFieldLength + 1];getCurDateAndTime(
     sCurDate, sCurTime);sprintf(szDestFileName, "%s/%s_%s%s%s%s%s", TRANSBALANCECOMPENSATE_DIR, szTmpString,
     y8.m_sNodeNo,pcCheckDate, pcLogSerial,sCurDate, sCurTime);switch (eResult){ case COMPENSATE_SUCCEED:
     case COMPENSATE_FAILED:case COMPENSATE_FILENAME_ERROR:case COMPENSATE_HEAD_INCORRECT:
    //文件名不正确、文件头不正确等,不重试。y2; case COMPENSATE_FILE_ERROR:{ //文件错误时,要重试整个文件。
    if (access(j1, F_OK | R_OK) == 0){char szCommand[1024];if (0 == strcmp(szSuffix, "_retry")){
    sprintf(szCommand, "mv %s %s 1>/dev/null 2>&1", j1, szDestFileName); } else {sprintf(szCommand, 
    "cp %s %s 1>/dev/null 2>&1",j1, szDestFileName);}if (system(szCommand) != 0) {ERRORLOG; y2;  } } else
     {  ERRORLOG;  y2; }} break;case COMPENSATE_EXP_FAILED: case COMPENSATE_UNLOCK_FAILED:
    //case COMPENSATE_SENDBILLS_FAILD:  因为有消息交互,且现网无应用,暂不处理。如果要重试,需要在主进程中处理。
    {//在获取文件头后,要将文件头中的笔数字修改为0,以避免重复统计。 z3 szFileHead;FILE* pfSrcFile = 
    fopen(j1, "r");if (NULL == pfSrcFile){ERRORLOG; y2;}if (NULL == fgets(szFileHead, LengthOfGeneralString, 
    pfSrcFile)){ERRORLOG;fclose(pfSrcFile);y2;}fclose(pfSrcFile);memset(szFileHead + strlen(szFileHead) - 10
    , '0', 10);FILE* pfDestFile = fopen(szDestFileName, "w+");if (NULL == pfDestFile){ ERRORLOG; y2;}
    if (fputs(szFileHead, pfDestFile) < 0){ERRORLOG;fclose(pfDestFile); y2;}fclose(pfDestFile);
    if (0 == strcmp(szSuffix, "_retry")){ unlink(j1); } } break; default: y2; } y1;}