void CFindFilesDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CString c1;
CString stredit;
CString strtemp;
HANDLE hFile;
WIN32_FIND_DATA fileinfo;
DWORD errorcode = 0;
m_Edit1.GetWindowText(c1); //要熟悉控件的基本使用
if(!c1.IsEmpty())
{
hFile=FindFirstFile("f:\\*.*",&fileinfo);
while(hFile!=INVALID_HANDLE_VALUE&&errorcode!=ERROR_NO_MORE_FILES)
{
//
strtemp=fileinfo.cFileName;
stredit=stredit+"\r\n";
stredit=stredit+strtemp;
FindNextFile(hFile,&fileinfo);
errorcode=GetLastError();
}
if(errorcode==ERROR_NO_MORE_FILES)
{
m_cedit1.SetWindowText(stredit);
MessageBox("检索结束");
}
CloseHandle(hFile);
}
}
在上述代码中
FindFirstFile第一个个参数需要一个路径,但要写*.*,表示从所有文件中找到的第一个.但写f:或者f:双斜杠都返回无效句柄.
如果f:\\1.txt 则对特定文件进行搜索,返回找到的第一个
找到的文件的文件结构被记录在WIN32_FIND_DATA结构体里
FindNextFile第一个参数是FindFirstFile的返回值,可以接着上次结果继续寻找
但注意!!!!
但一个目录的文件被搜索一遍后,FindNextFile返回的WIN32_FIND_DATA结构体将重复找到最后一个找到的文件,而不会终止.
让循环结束的方法就是找上一次的报错码,然后看有没有ERROR_NO_MORE_FILES信息发生.
hFile的有效与否个人觉得还是取决于第一次的FindFirstFile结果,本程序后半段的运行主要还是errorcode!=ERROR_NO_MORE_FILES在控制.