#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
void listdir(char *path,int iYear,int iMon)
{
char sPath[1024];
char chn_name[256];
char fsname[256];
char ym[5];
char *pc;
int i ,j ;
bool bFlag;
struct stat buff;
struct dirent* ent = NULL;
DIR *pDir;
char sub_path[1024];
pDir=opendir(path);
sprintf(ym,"%02d%02d",iYear,iMon);
while (NULL != (ent=readdir(pDir)))
{
sprintf(sub_path,"%s/%s",path, ent->d_name);
if(stat(sub_path,&buff) < 0 )
{
continue ; //TODO
}
if(S_ISDIR(buff.st_mode))
{
continue ;
}
if(S_ISREG(buff.st_mode))
{
strcpy(fsname, ent->d_name);
if( (pc = strchr(fsname,'.')) == NULL)
continue;
*pc = '\0';
strcpy(chn_name ,fsname);
pc += 1;
if(strlen(pc)!= 5)
continue;
bFlag = false;
if(*pc == 'O')
{
pc +=1;
if(memcmp( pc, ym ,4) == 0)
{
for( i=0 ; i<= iNum ; i++ )
{
if( strcmp(Channel[i].cChName,chn_name) == 0)
{
bFlag=true;
break;
}
}
if(bFlag)
{
Channel[i].iOutNum += buff.st_size/LEN_TELE_OUT;
}
else
{
strcpy( Channel[iNum].cChName,chn_name);
Channel[iNum].iOutNum += buff.st_size/LEN_TELE_OUT;
iNum++;
}
}
}
else if(*pc == 'I')
{
pc +=1;
if(memcmp( pc, ym ,4) == 0)
{
for( i = 0 ; i <= iNum ; i++ )
{
if(strcmp(Channel[i].cChName,chn_name) == 0 )
{
bFlag=true;
break;
}
}
if(bFlag)
{
Channel[i].iInNum+= buff.st_size/LEN_TELE_IN;
}
else
{
strcpy( Channel[iNum].cChName ,chn_name);
Channel[iNum].iInNum+= buff.st_size/LEN_TELE_IN;
iNum++;
}
}
}
else
continue;
}
}
closedir(pDir);
}