我是个初学者,请给我讲解的详细一些。谢谢了。
我从网上找了个 “遍历目录查找文件”的例子,照着做了一个,编译后在没有pagefile.sys的目录下查找文件运行很正常,一旦在有pagefile.sys的目录下(如:c:\)查找文件,就出现窗口闪一下就消失了。
我是个初学者,请给我讲解的详细一些。谢谢了。
一下是代码:
void CSearchDlg::OnButtonSearch()
{
// TODO: Add your control notification handler code here
char szFilename[80];
//字符串szFilename表示要查找的文件名
strcpy(szFilename,"RamCleaner.exe");
_chdir("d:\\disktop_bak\\"); //进入要查找的路径(也可以是某一具体的目录)
//查找文件,如果查到则显示文件的路径全名
Search_Directory(szFilename);
//CsearchDlg类的一个成员函数
MessageBox("查找文件完毕.");
//显示查找完毕的信息
}
void CSearchDlg::Search_Directory(char *szFilename)
{
long handle;
struct _finddata_t filestruct;
//表示文件(目录)的信息
char path_search[_MAX_PATH];
//表示查找到的路径结果
//开始查找工作,找到当前目录下的第一个实体(文件或子目录)
//'*'表示查找任何的文件或子目录,filestruct为查找结果
handle = _findfirst("*",&filestruct);
//如果handle为-1,表示当前目录为空,则结束查找而返回
if (handle==-1)
{
return;
}
//检查找到的第一个试题是否是一个目录(fileestruct.name为其名称)
if(::GetFileAttributes(filestruct.name)&FILE_ATTRIBUTE_DIRECTORY)
{
//如果是目录,则进入该目录并递归调用函数Search_Dirctory进行查找
//MessageBox(filestruct.name);
if(filestruct.name[0]!='.')
{
_chdir(filestruct.name);
Search_Directory(szFilename);
//查找完毕之后返回上一级目录
_chdir("..");
}
}
else //如果第一个实体不时目录,则检查是否是要查找的文件
{
//stricmp对两字符串进项消协形式的对比,返回0表示完全一致
if(!stricmp(filestruct.name,szFilename))
{
//先获得当前工作目录的全路径
_getcwd(path_search,_MAX_PATH);
//在获得文件的完整路径名(包含文件的名称)
strcat(path_search,"\\");
strcat(path_search,filestruct.name);
MessageBox(path_search); //输出显示
}
}
//继续对当前目录中的下一个子目录或文件进行与上面同样的查找
while(!(_findnext(handle,&filestruct)))
{
if(::GetFileAttributes(filestruct.name)&FILE_ATTRIBUTE_DIRECTORY)
{
if(*filestruct.name!='.')
{
_chdir(filestruct.name);
Search_Directory(szFilename);
_chdir("..");
}
}
else
{
if(!stricmp(filestruct.name,szFilename))
{
_getcwd(path_search,_MAX_PATH);
strcat(path_search,"\\");
strcat(path_search,filestruct.name);
MessageBox(path_search);
}
}
}
_findclose(handle);
}