查找目标文件并删除
主要使用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;
}
浙公网安备 33010602011771号