查找目标文件并删除

 

    主要使用opendir_emulation(LOGFILEPATH)打开以LOGFILEPATH为目录名的文件目录,然后以readdir_emulation(base_dir)依次读取该目录下文件名,其中entry->d_name即为具体文件名,之后比较判断,以remove(file_full_name)删除以file_full_name为路径+文件名的具体文件。

 

 

int IsLogFile(char* filename);      //是否为日志文件

int IsOverDue(time_t curr_time,int year,int mon,int day)     // 文件是否过期

void OverDueFilesDel(void)         //删除特定文件主程序

 

void OverDueFilesDel(void)

{

            char LogText[255];                                            // 保存记录信息的临时字符串

            char file_full_name[255];

            int year_file;

            int mon_file;

            int day_file;

 

            struct ACE_DIR* base_dir;

            struct ACE_DIRENT* entry;

            time_t curr_time = time(NULL);

 

            if((base_dir = ACE_OS::opendir_emulation(LOGFILEPATH)) == NULL)

            {

                        sprintf( LogText, "DeleteLogFileLast2Day: cannot open directory .");

                        psDiagnoseLog("Callback::OverDueFilesDel", LM_DEBUG, LogText);

                        return;

            }

 

            while((entry = ACE_OS::readdir_emulation(base_dir)) != NULL)

            {

                        // 找出的文件是否是记录文件?

                        if (IsLogFile(entry->d_name) == 0)

                        {

                                    sprintf( LogText, "DeleteLogFileLast2Day: %s is not log file.", entry->d_name);

                                    psDiagnoseLog("Callback::OverDueFilesDel",LM_DEBUG, LogText);

                                    continue;

                        }

                        else

                        {

//                                  sprintf( LogText, "OverDueFilesDel: %s is log file.", entry->d_name);

//                                  psDiagnoseLog("Callback::OverDueFilesDel",LM_DEBUG, LogText);

                        }

 

                        // 文件是否过期?是就删除

                        sscanf(entry->d_name,"%04d%02d%02d",&year_file, &mon_file,&day_file);

                        if (IsOverDue(curr_time,year_file,mon_file,day_file) == 1)

                        {

                                    sprintf(file_full_name,"%s%s", LOGFILEPATH, entry->d_name);

                                    remove(file_full_name);

                                    sprintf( LogText, "OverDueFilesDel: %s is an overdue logfile, deleted.", file_full_name);

                                    psDiagnoseLog("Callback::OverDueFilesDel", LM_DEBUG, LogText);         

                        }

                        else

                        {

                                    sprintf(file_full_name,"%s%s",LOGFILEPATH,entry->d_name);

                                    sprintf( LogText, "OverDueFilesDel: %s is not an overdue logfile.", file_full_name);

                                    psDiagnoseLog("Callback::OverDueFilesDel", LM_DEBUG, LogText);         

                        }

            }

 

            ACE_OS::closedir_emulation(base_dir);

 

}

int IsLogFile(char* filename)

{

            int i;

 

            if (strlen(filename)!=17)

            {

                        return 0;

            }

 

            for (i=0;i<8;i++)

            {

                        if (filename[i]<'0' || filename[i]>'9')

                        {

                                    return 0;

                        }

            }

 

            if (filename[13]!='.' || filename[14]!='l' ||

                        filename[15]!='o' || filename[16]!='g')

            {

                        return 0;

            }

 

            return 1;

}

 

int IsOverDue(time_t curr_time,int year,int mon,int day)

{

            struct tm ntime;

            time_t file_time;

 

            ntime.tm_sec = 0 ;

            ntime.tm_min = 0 ;

            ntime.tm_hour = 0 ;

            ntime.tm_mday = day ;

            ntime.tm_mon = mon-1 ;

            ntime.tm_year = year-1900 ;

            ntime.tm_wday = 0 ;

            ntime.tm_yday = 0 ;

            ntime.tm_isdst = 0 ;       

            file_time = mktime(&ntime);

 

            if (difftime(curr_time,file_time)/86400 > LOGFILESAVEDATA)

            {

                        return 1;

            }

            return 0;

}

 

 

posted on 2008-10-10 14:14  王少敏  阅读(468)  评论(0)    收藏  举报

导航