VC++指定目录下文件按时间排序输出

功能: 获取某一指定目录下的所有文件,然后按时间排序保存,一般用于界面展示,或者文件列表排序功能…

 

//排序
void CSubCameraControlDlg::FileArraySortbySystemTime(CStringArray& _arr)
{
	int len = _arr.GetCount();
	for(int i=0; i<len-1; i++)		
	{		
		int min=i;		
		for(int j=i+1; j<len; j++)		
		{	

			CString strtime1=GetFileLastModifyTime(_arr[min]);
			CString strtime2=GetFileLastModifyTime(_arr[j]);

			if(lstrcmpi(strtime1,strtime2)>0)
			{
				min=j;	
			}
		}					
		CString t=_arr[min];		
		_arr[min]=_arr[i];		
		_arr[i]=t;		
	}


}

//获取时间
 CString GetFileLastModifyTime(LPCTSTR strPath)
{
	if (!::PathFileExists(strPath))
	{
		return _T("");
	}

	WIN32_FIND_DATA ffd ;  
	HANDLE hFind = FindFirstFile(strPath,&ffd);
	if (INVALID_HANDLE_VALUE == hFind)
	{
		return _T("");
	}
	SYSTEMTIME st = {0};  
	FILETIME LocalFileTimel;

	FileTimeToLocalFileTime(&ffd.ftLastWriteTime, &LocalFileTimel);
	FileTimeToSystemTime(&LocalFileTimel, &st);

	CString strFormat;
	strFormat.Format(_T("%04d-%02d-%02d %02d:%02d:%02d.%03d"),st.wYear, st.wMonth, st.wDay,
		st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);

	FindClose(hFind);
	return strFormat;
}


//查找目录下的文件
void CSubCameraControlDlg::FindDirFile(CString strdir, CStringArray& _arr)
{

	TCHAR szPath[MAX_PATH] = {0};
	::GetModuleFileName(NULL, szPath, MAX_PATH);
	::PathRemoveFileSpec(szPath);
	CString strffmpegPath;
	::PathCombine(strffmpegPath.GetBufferSetLength(MAX_PATH), szPath, strdir);
	//  CString filepath = _T("/path/to/folder/"); 
    CString filename = _T("");
    CString fullname = _T("");

    CFileFind find;
    BOOL IsFind = find.FindFile(strffmpegPath + _T("/*.*"));

    while (IsFind)
    {
        IsFind = find.FindNextFile();
        if (find.IsDots())
		{
            continue;
		}
        else
		{
            filename = find.GetFileName();
            fullname = strffmpegPath + filename;
			_arr.Add(fullname);
		}
	}
}

 

    原文作者:keivin2006
    原文地址: https://blog.csdn.net/kaizi318/article/details/109532454
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞