各位大虾,怎样实现硬盘里所有分区所有目录的文件查找!用CFileFind都要指定路径啊!急!
解决方案 »
- 谁了解“SetDlgItemText”这个函数?
- Visual studio 2008,突然没法在资源视图中查看工程资源,怎么回事?
- 如何提高读取效率
- 求《windows网络编程》(第2版)电子书及附书代码(100分)
- 大家好!急问!急问!急问!
- Win2000下重启动后运行某程序或批处理, 而且只运行一次, 且先于其它任何服务之前?
- 为何CListCtrl :: GetNextItem(-1, LVNI_SELECTED)会返回 -1?
- 有谁知道大型主机编程和一般的pc编程有什么区别吗??
- FindWindow一个U3D程序,然后发送键盘消息,必须重新刷新U3D才能成功传到
- CWnd类的SubclassWindow函数如何使用
- 我的FTPGETFILESIZE为何不行??
- 急!!!!installshield 6.2 中怎样可以添加卸载的快捷按钮
_chdir(); //设置当前目录
_findfirst() ; //只在当前目录查找
_findnext(); //查找下一个
具体函数使用参照MSDN
FindNextFile();
FindClose();
BOOL Cdlg1Dlg::FindFile(LPCTSTR pszFileName)
{
WIN32_FIND_DATA FileData;
HANDLE hSearch;
TCHAR szFile2Find[]=_T("*"); hSearch=::FindFirstFile(szFile2Find, &FileData);
if (hSearch == INVALID_HANDLE_VALUE)
return FALSE;
if(FileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
if(FileData.cFileName[0]!=_T('.'))
{
SetCurrentDirectory(FileData.cFileName);
FindFile(pszFileName);
}
}
else
{
TCHAR szFullPathName[MAX_PATH]={0};
TCHAR szFileName[MAX_PATH]={0};
LPTSTR pszFilePart=szFileName;
DWORD cchSize=sizeof(szFullPathName);
GetFullPathName(FileData.cFileName,cchSize,szFullPathName,&pszFilePart);
if(lstrcmpi(FileData.cFileName,pszFileName)==0)
{
m_list.AddString(szFullPathName);
}
else
SetDlgItemText(IDC_LISTBOX,szFullPathName);
} while(1)
{
if (!FindNextFile(hSearch, &FileData))
{
if (GetLastError() == ERROR_NO_MORE_FILES)
{
SetCurrentDirectory(_T(".."));
break;
}
} if(FileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
if(FileData.cFileName[0]!=_T('.'))
{
SetCurrentDirectory(FileData.cFileName);
FindFile(pszFileName);
}
}
else
{
TCHAR szFullPathName[MAX_PATH]={0};
TCHAR szFileName[MAX_PATH]={0};
LPTSTR pszFilePart=szFileName;
DWORD cchSize=sizeof(szFullPathName);
GetFullPathName(FileData.cFileName,cchSize,szFullPathName,&pszFilePart);
if(lstrcmpi(FileData.cFileName,pszFileName)==0)
{
m_list.AddString(szFullPathName);
}
else
SetDlgItemText(IDC_LISTBOX,szFullPathName);
} } FindClose(hSearch);
return TRUE;
}使用的方法
SetCurrentDirectory(_T("C:\\"));设置一下开始搜索的卷如D:\
FindFile(_T("stdafx.h"));建议,给它开个线程吧,
void CTimeDlg::Find(LPCTSTR lfile,CString path)
{
UpdateData(TRUE);
WIN32_FIND_DATA fd;
m_list.ResetContent();
HANDLE hd = ::FindFirstFile(lfile,&fd);
CFile file;
CFileStatus status;
path += fd.cFileName;
//TRACE("str = %s\n",str);
file.GetStatus(path,status);
if (status.m_ctime >= m_Begintime && status.m_ctime <= m_Endtime)
{
m_list.AddString(fd.cFileName);
}
while (FindNextFile(hd,&fd))
{ CFile file1;
//CString m_path = "c:\\";
path += fd.cFileName;
file1.GetStatus(path,status);
if (status.m_ctime >= m_Begintime && status.m_ctime <= m_Endtime)
{
m_list.AddString(fd.cFileName);
}
}}
你还忘了FindClose(hd);
FILETIME,或者直接把m_BeginTime和m_EndTime类型改成FILETIME就可以了吧,然后在构造的时候给它们赋初值,如果你已经把它们和Date Time Picker联系的话