find(char * lpPath)
{
char szFind[MAX_PATH];
WIN32_FIND_DATA FindFileData;
strcpy(szFind,lpPath);
strcat(szFind,"//*.*");
HANDLE hFind=::FindFirstFile(szFind,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind) return;
while(TRUE)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(FindFileData.cFileName[0]!='.')
{
strcpy(szFile,lpPath);
strcat(szFile,"//");
strcat(szFile,FindFileData.cFileName);
find(szFile);
}
}
else
{
cout << FindFileData.cFileName;
}
if(!FindNextFile(hFind,&FindFileData)) break;
}
FindClose(hFind);
}
=============================================================
void CBrowseDlg::BrowseDir( CString strDir, HTREEITEM parent )
{
CFileFind ff;
CString szDir=strDir;
HTREEITEM hSubItem;
if(szDir.Right(1) != "//")
{
szDir += "//";
}
szDir += "*.*";
BOOL res = ff.FindFile( szDir );
while(res)
{
res = ff.FindNextFile();
if( ff.IsDirectory() && !ff.IsDots() )
{
CString strPath = ff.GetFilePath();
CString strTitle = ff.GetFileTitle();
hSubItem = m_fileTree.InsertItem( strTitle, 0, 0, parent );
BrowseDir( strPath, hSubItem );
}
else
{
if( !ff.IsDirectory() && !ff.IsDots() )
{
CString strTitle=ff.GetFileTitle();
m_fileTree.InsertItem( strTitle, 0, 0, parent );
}
}
}
ff.Close();
}
==================================================
step 1:
得到目录下所有文件存入m_strArrFilename.
//xxx.h
CStringArray m_strArrFilename;
//xxx.cpp
void CTest6Dlg::OnButton1()
{
FindMyFile("D://1//");
CString str="";
}
void CTest6Dlg::FindMyFile(CString path)
{
BOOL bFind, bFindSuffix;
CFileFind tempFind, tempFind1;
_chdir(path);
bFind = tempFind.FindFile("*.*");
while(bFind)
{
bFind = tempFind.FindNextFile();
if(tempFind.IsDirectory())
{
if (!tempFind.IsDots() )
{
CString temppath;
temppath = tempFind.GetFilePath();
FindMyFile(temppath);
}
}
}
_chdir(path);
bFindSuffix = tempFind1.FindFile("*.*");
while(bFindSuffix)
{
bFindSuffix = tempFind1.FindNextFile();
CString filepath, filename;
if( !tempFind1.IsDirectory() && !tempFind1.IsDots())
{
filepath = tempFind1.GetFilePath();
m_strArrFilename.Add(filepath);
}
}
tempFind.Close();
tempFind1.Close();
}
-----------------------------------------------
step 2:
得到文件的一些属性,并比较时间
WIN32_FIND_DATA ffd;
HANDLE hFind = FindFirstFile(m_strArrFilename[0], &ffd);
FILETIME ftCreationTime = ffd.ftCreationTime;
FILETIME ftLastWriteTime = ffd.ftLastWriteTime;
然后比较所有文件的时间,进行排序。。。