那你今天算是遇到"高手"了~~~
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系列的自己改函数名吧~~~
文件按时间排序的一个实现思路
最新推荐文章于 2024-05-29 17:33:36 发布