티스토리 뷰

반응형

void __fastcall TMainFrm::LogFileDelProcess(void)
{
    char        ProgramPath[MAX_PATH];
    AnsiString  FolderPath, SearchFolderPath;
    char        arLogFolder[8][20] = {  "PING_LOG"  , "PING_LOG_2", "FOS_LOG"       , "SHARE_LOG",
                                        "SC_LOG"    , "SENDER_LOG", "DIAGNOSE_LOG"  , "SALEINFO_LOG" };

    memset(ProgramPath, 0x00, sizeof(ProgramPath));

    //  현재 폴더 알아내기 + 로그 폴더
    if(GetCurrentDirectory(MAX_PATH, ProgramPath))  {
        //  한달전 날짜 구하기
        TDateTime       dtBeforeDate;
        AnsiString      BeforeOneMonth;

        dtBeforeDate    = StrToDateTime(Now() - 30);
        BeforeOneMonth  = dtBeforeDate.FormatString("YYYYMMDD");

        Log.WriteLogFormat("한달 이전 로그 파일 삭제 (%s)", BeforeOneMonth);

        //  다른 로그 폴더로 같은 실행 반복
        for(int i = 0; i < 8; i ++)  {

            FolderPath.sprintf("%s\\%s", ProgramPath, arLogFolder[i]);

            //  로그 폴더가 존재한다면
            if(DirectoryExists(FolderPath))  {
                SearchFolderPath.sprintf("%s\\*", FolderPath);  //  파일을 모두 찾기 위해 * 을 붙힌다.

                //  현재 날짜를 알아와  폴더의 리스트 중에 생성 일자가 1달 이전 파일이면 찾아서 지우기
                HANDLE          hFind;
                WIN32_FIND_DATA wfd;
                BOOL            bExistsFile = TRUE;
                AnsiString      LogFileName;

                hFind = FindFirstFile(SearchFolderPath.c_str(), &wfd);

                if(hFind != INVALID_HANDLE_VALUE)  {   //  폴더에 파일을 찾았다면
                    while(bExistsFile)  {
                        LogFileName.sprintf("%-8.8s", wfd.cFileName);   //  Ping로그는 20130131-17 이런 형식이서 비교하기 위해 연,월,일만 추출

                        //  . 과 .. 이 같이 검색 되어 걸러내고 Ping로그는 20130131-17 이런 형식이서 지울때 주의 한다.
                        if((BeforeOneMonth > LogFileName) && (LogFileName.Trim().Length() >= 8))    {
                            LogFileName.sprintf("%s\\%s", FolderPath, wfd.cFileName);   //  Ping로그는 20130131-17 이런 형식이서 지울때는 원래 이름을 사용
                            //  Log.WriteLogString(LogFileName);

                            if(!DeleteFile(LogFileName))  {
                                Log.WriteLogFormat("로그 파일 삭제 중 오류 발생 (%s)", LogFileName);
                                FindClose(hFind);
                                return;
                            }
                        }

                        bExistsFile = FindNextFile(hFind, &wfd);
                    }
                }

                FindClose(hFind);
            }
        }
    }
    else    {
        Log.WriteLogString("현재 경로를 알아오는 중 오류 발생 @");
    }
}

 

반응형

'프로그래밍 > C++ Builder' 카테고리의 다른 글

바코드 (Code39, Code128)  (0) 2019.07.16
SetTimer API 사용  (0) 2019.07.16
dclusr.lib 링크 에러  (0) 2019.07.16
폴더 지정  (0) 2019.07.16
StringGrid를 엑셀로 저장  (0) 2019.07.16
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday