'programming/C_C++'에 해당되는 글 279건

  1. 2011.11.28 디렉토리안의 파일 최종 수정일이 1시간이 지난 파일 삭제 처리

반응형


/**********************************************************************************/
/* 디렉토리를 체크하여 최종 수정일이 1시간이 지난파일이 있으면 삭제 한다.         */
/**********************************************************************************/

void ExpiredFileRemove()
{
    DIR    *dirp;
    struct dirent *dp;

    char szFilePath[512] = {'\0'};
    char szFileName[512] = {'\0'};

    struct timeval curr;

    long   lExpireTime = 0;

    char   szCurrTime[20] = {'\0'};

    char   szExpireTime[20] = {'\0'};

    char   szFileTime[20] = {'\0'};

    struct stat     Fstat;
   
    int   nFileCnt = 0;

    /***************************************************************************************/

    /* 현재 시간 */
    gettimeofday( &curr, NULL);
    memset(szCurrTime, 0x00, sizeof(szCurrTime));
    strftime(szCurrTime, sizeof(szCurrTime), "%Y%m%d%H%M%S", localtime((time_t*)&curr.tv_sec));

    /* 현재시간의 1시간 이전 시간  */
    lExpireTime = (curr.tv_sec) - ( 1 * 60 * 60 );
    memset(szExpireTime, 0x00, sizeof(szExpireTime));
    strftime(szExpireTime, sizeof(szExpireTime), "%Y%m%d%H%M%S", localtime((time_t*)&lExpireTime));

    /* 디렉토리 Search, 없으면 디렉토리 생성 */
    memset(szFilePath, 0x00, sizeof(szFilePath));
    sprintf(szFilePath, "/data/log/");

    if ((dirp = opendir(szFilePath)) == NULL)
    {
        if (errno != ENOENT)
        {

            sprintf(stderr,"(ERROR) Opendir Failed. szFilePath[%s] errno=%d(%s)\n",szFilePath,errno,strerror(errno));
            return;
        }

        if (mkdir(szFilePath,0755) < 0)
        {

            sprintf(stderr,"(ERROR) Mkdir Failed. szFilePath[%s] errno=%d(%s)\n",szFilePath,errno,strerror(errno));
            return;
        }
    }
    else
    {
        closedir(dirp);
    }

    /***************************************************************************************/

    if ((dirp = opendir(szFilePath)) == NULL)
    {

        sprintf(stderr, "(ERROR) opendir(). Failed.[%s] errno=%d(%s)\n",szFilePath,errno,strerror(errno));
        return;
    }
    else
    {
        while ( ( dp = readdir( dirp )) != NULL )
        {
            if( strcmp(dp->d_name, ".") != 0 && strcmp(dp->d_name, "..") != 0 )
            {

                nFileCnt++;

                memset(szFileName, 0x00, sizeof(szFileName));
                sprintf(szFileName, "%s%s", szFilePath, dp->d_name);

                if (stat(szFileName, &Fstat) != 0)
                {

                    sprintf(stderr, "(ERROR) File Not Found. szFileName[%s]\n", szFileName);
                    continue;

                }

                memset(szFileTime, 0x00, sizeof(szFileTime));
                strftime(szFileTime, sizeof(szFileTime), "%Y%m%d%H%M%S", localtime((time_t*)&Fstat.st_mtime));

                /* 파일의 최종수정시간이 1시간이전의 파일 삭제 처리 */
                if( strncmp(szExpireTime, szFileTime, 14) > 0 ) {

                    if( remove(szFileName) < 0 ) {
                        remove(szFileName);
                    }

                }

            }  /* 현재디렉토리와 상위디렉토리가 아닌 파일이 있을 경우 */
        }

        closedir(dirp);
    }

    return;

}



 

반응형
Posted by 공간사랑
,