首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

时间排序有关问题

2013-09-06 
时间排序问题有三个文本文件file1,file2,file3,里面存的内容是类似这样的:user1|12345|1377676605其中1377

时间排序问题
有三个文本文件file1,file2,file3,里面存的内容是类似这样的:  user1|12345|1377676605   其中1377676605是日历时间,需求是取出日历时间据当前时间最近的文件名。


CFileFind finder;
BOOL findRes=finder.FindFile(fileListDir);
while(findRes)
{
CString strRead;
findRes=finder.FindNextFile();
CString filePath=finder.GetFilePath();
CStdioFile fileRead;
fileRead.Open(filePath,CFile::modeReadWrite);
fileRead.ReadString(strRead);
fileRead.Close();
CString strGet;
AfxExtractSubString(strGet,(LPCTSTR)strRead,2,'|');//get date string

long tempGet=atol(strGet);//文件里取出的时间

CTime currentTime=CTime::GetCurrentTime();
long timel=currentTime.GetTime();//当前时间

                //下面的逻辑就不知道该怎么写了,请各位大神帮忙,谢谢

}

[解决办法]

//搞个结构体保存需要文件的信息
typedef struct {
    char filename[20];
    unsigned int  rangeflag;

}FileParam;

//一个全局的结构体保存最近的一个文件信息
FileParam m_stParamInfo;
memset(&m_stParam, '\0', sizeof(FileParam));

m_stParamInfo.rangeflag = 100000; 
//目前我简单写给100000,
//如果是你实际程序的话,最好搞一个第一次的标识量
//第一次打开第一个文件的时候就直接赋值
while(findRes)
{

    //........
    // you dosomething...
    //下面的逻辑就不知道该怎么写了,请各位大神帮忙,谢谢

    char ReadTime[20] = {0};
    char CurTime[20]  = {0};    
    FileParam stCurFileInfo;
    memset(&stCurFileInfo, '\0', sizeof(FileParam));

    AfxExtractSubString(ReadTime, (LPCTSTR)strRead,2,'
[解决办法]
');
    //这个接口不知道直接传字符串有问题没,懂这个意思就好
        
    CTime currentTime=CTime::GetCurrentTime();
    long timel=currentTime.GetTime();//当前时间
    sprintf(CurTime, "%ld", timel); //转换成字符串比较



    stCurFileInfo.rangeflag = abs( strncmp(ReadTime, CurTime) );
    // 比较取最小值时间差,信息保存到全局结构体中
    if( stCurFileInfo. rangeflag < m_stParamInfo.rangeflag )
    {   
        m_stParamInfo.rangeflag = stCurFileInfo.rangeflag;
        strncpy(m_stParamInfo.filename,Curfilename, 20); 
    }   
}



不晓得有没有更好的办法

热点排行