目前位置: VCer资源中心 >>> VCer代码 >>> C++/MFC基础

[本帖已阅读2389次 分值80 回复1次] 张贴资源 发回信箱 控制面板

关于遍历目录的问题求救!~

提供者:ymchinabye 张贴时间:2004-09-02 14:59:47.0 出处:vcer.net 作者:不祥

关于遍历目录的问题求救!~(2004-09-02 14:59:47.0)


小馒头


 
级别: VCer小兵
头衔: VCer会员

经验: 175
作品: 3
分会: 华北分会
注册: 2004-09-02 14:52:50.0
登录: 2004-11-24 08:39:39.0

我是个初学者,请给我讲解的详细一些。谢谢了。

我从网上找了个 “遍历目录查找文件”的例子,照着做了一个,编译后在没有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);

}

 

注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/3151.html

  如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:) vcer.net捐赠

[回复该贴] [加入个人书签]
[投票结果]

A: 评分 10 0% (0 票)
B: 评分 5 0% (0 票)
C: 评分 0 0% (0 票)
D: 评分 -5 0% (0 票)
E: 评分 -10 0% (0 票)

 


re:关于遍历目录的问题求救!~
还有一些疑问: 我用楼上的遍历目录的方法试了一下,再那里都没有问题。谁可以给我讲已将两种方式到底有什么本质上的区别?

ymchinabye 于 2004-09-02 15:25:32.0 编辑 [回复该贴]