티스토리 뷰
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