文件按时间排序的一个实现思路

那你今天算是遇到"高手"了~~~ 
B)

#define MAKELONG(Hi, Lo)	(((long)Hi << 16) | (long)Lo)
#define MAX_FILENUM                  2000

// 自定义文件列表数据结构.
typedef struct tagFileListData
{
    char	m_sName[8];	// 文件名(不含结束符).
    char	m_sExt[4];	// 扩展名(不含结束符).
    long	m_lDate;	// 文件日期时间(DOS格式).
    long	m_lSize;	// 文件大小(字节).
    uchar	m_ucAttrib;	// 文件属性.	
} FILELISTDATA;

int               g_nOrder = 1;

FILELISTDATA      ListData[MAX_FILENUM];// 线性数组缓冲区,便于使用库函数qsort()排序.
FILELISTDATA	*pFileListData = ListData;
struct find_t	Find;
char    szPath[_MAX_PATH], szDir[_MAX_DIR];
char	szName[_MAX_FNAME], szExt[_MAX_EXT];
uint	nAttrib;
int 	nNum;


// 要查找的路径.
strcpy(szPath, "D:\C700\BIN\*.*");

// 初始化文件个数计数器.
nNum = 0;
if(!_dos_findfirst(szPath, nAttrib, &Find))
{
    if(Find.attrib & nAttrib)
    {
        // 分解文件名.
        _splitpath(Find.name, szDrive, szDir, szName, szExt);
        // 填充文件数据结构.
        memcpy(pFileListData->m_sName, szName, strlen(szName));
        memcpy(pFileListData->m_sExt, szExt, strlen(szExt));
        pFileListData->m_lDate = MAKELONG(Find.wr_date, Find.wr_time);
        pFileListData->m_lSize = Find.size;
        pFileListData->m_ucAttrib = Find.attrib;
        // 增加文件计数器.
        nNum ++;
        pFileListData ++;
    }
    while(!_dos_findnext(&Find))
    {
        if(Find.attrib & nAttrib)
        {
            // 分解文件名.
            _splitpath(Find.name, szDrive, szDir, szName, szExt);
            // 填充文件数据结构.
            memcpy(pFileListData->m_sName, szName, strlen((szName));
            memcpy(pFileListData->m_sExt, szExt, strlen(szExt));
            pFileListData->m_lDate = MAKELONG(Find.wr_date, Find.wr_time);
            pFileListData->m_lSize = Find.size;
            pFileListData->m_ucAttrib = Find.attrib;
            // 增加文件计数器.
            nNum ++;
            pFileListData ++;
            // 如果超过最大个数则退出.
            if(nNum >= MAX_FILENUM) break;
        }
    }
}

// 按照时间排序, 执行完毕ListData[]数组中的文件已经完成排序.
// 照此方法还可以按照文件名等属性排序.
qsort(ListData, nNum, sizeof(FILELISTDATA), SortByDate);

// 比较函数.
// 按照文件生成的日期和时间排序.
int _far SortByDate(FILELISTDATA *pData1, FILELISTDATA *pData2)
{
int 	nRet;

if(pData1->m_lDate < pData2->m_lDate) nRet = -1;
else if(pData1->m_lDate > pData2->m_lDate) nRet = 1;
else nRet = 0;

         // g_nOrder是个全局变量,取值为1时为升序,-1为降序.
return(g_nOrder * nRet);
}


使用MSC6.0或MS C/C++7.0编译,borland系列的自己改函数名吧~~~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值