📄 用vc++遍历目录----源码下载网.htm
字号:
title="文章标题:Web广告技巧 发布时间:2006-3-23 20:05:06 阅览次数:0"
href="http://www.hsip.cn/article/12/2006/2006032317767.html"
target=_blank>Web广告技巧</A></TD>
<TD class=showlist22></TD></TR>
<TR>
<TD class=showlist21>· <A class=showlist
title="文章标题:我是怎么把工资从400变成40000的 发布时间:2006-3-23 20:05:04 阅览次数:3"
href="http://www.hsip.cn/article/12/2006/2006032317768.html"
target=_blank>我是怎么把工资从400变...</A></TD>
<TD class=showlist21></TD></TR>
<TR>
<TD class=showlist22>· <A class=showlist
title="文章标题:简单判别“钓鱼”网站的方法 发布时间:2006-3-23 20:05:01 阅览次数:3"
href="http://www.hsip.cn/article/12/2006/2006032317769.html"
target=_blank>简单判别“钓鱼”网站...</A></TD>
<TD class=showlist22></TD></TR>
<TR>
<TD class=showlist21>· <A class=showlist
title="文章标题:解读Windows 死机密码 发布时间:2006-3-23 20:04:54 阅览次数:2"
href="http://www.hsip.cn/article/12/2006/2006032317770.html"
target=_blank>解读Windows 死机密码...</A></TD>
<TD class=showlist21></TD></TR>
<TR>
<TD class=showlist22>· <A class=showlist
title="文章标题:[自娱自乐]PR你想要多少就有多少 发布时间:2006-3-23 20:04:39 阅览次数:1"
href="http://www.hsip.cn/article/12/2006/2006032317771.html"
target=_blank>[自娱自乐]PR你想要多...</A></TD>
<TD class=showlist22></TD></TR>
<TR>
<TD class=showlist21>· <A class=showlist
title="文章标题:网站推广方法–友情链接 发布时间:2006-3-23 20:04:37 阅览次数:2"
href="http://www.hsip.cn/article/12/2006/2006032317772.html"
target=_blank>网站推广方法–友情链...</A></TD>
<TD class=showlist21></TD></TR>
<TR>
<TD class=showlist22>· <A class=showlist
title="文章标题:一搜排名优化技巧 发布时间:2006-3-23 20:04:35 阅览次数:2"
href="http://www.hsip.cn/article/12/2006/2006032317773.html"
target=_blank>一搜排名优化技巧</A></TD>
<TD class=showlist22></TD></TR>
<TR>
<TD class=showlist21>· <A class=showlist
title="文章标题:让你的IE轻装上阵 发布时间:2006-3-23 20:04:33 阅览次数:0"
href="http://www.hsip.cn/article/12/2006/2006032317774.html"
target=_blank>让你的IE轻装上阵</A></TD>
<TD class=showlist21></TD></TR>
<TR>
<TD class=showlist22>· <A class=showlist
title="文章标题:微软拼音输入法超级技巧 发布时间:2006-3-23 20:04:25 阅览次数:3"
href="http://www.hsip.cn/article/12/2006/2006032317775.html"
target=_blank>微软拼音输入法超级技...</A></TD>
<TD class=showlist22></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD bgColor=#ffffff height=2></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=titleback1> 相关文章</TD></TR>
<TR>
<TD vAlign=top height=100>· <FONT color=#ff0066>[组图]</FONT> <A
title=用VC++设计基于ODBC的数据库管理系统
href="http://www.hsip.cn/article/12/2006/2006072633134.html"><FONT
color=#808080>用VC++设计基于ODBC...</FONT></A><BR>· <A
title=用VC++实现http代理
href="http://www.hsip.cn/article/12/2006/2006071633077.html">用VC++实现http代理...</A><BR>·
<A title=ASP,FSO遍历目录及目录下文件
href="http://www.hsip.cn/article/12/2006/2006032432291.html">ASP,FSO遍历目录及...</A><BR>·
<A title=SNMP用VC++6.0实现的方法
href="http://www.hsip.cn/article/12/2006/2006031428518.html">SNMP用VC++6.0实现的...</A><BR>·
<A title=遍历目录以及目录下文件的函数
href="http://www.hsip.cn/article/12/2006/2006032426553.html">遍历目录以及目录下...</A><BR>·
<A title=利用VC++编程实现程序自动启动
href="http://www.hsip.cn/article/12/2006/2006031424078.html">利用VC++编程实现程...</A><BR>·
<A title=利用VC++编写Windows95的CPL组件
href="http://www.hsip.cn/article/12/2006/2006031424077.html">利用VC++编写Window...</A><BR>·
<A title=利用VC++获取异构型数据库库结构信息
href="http://www.hsip.cn/article/12/2006/2006031424076.html">利用VC++获取异构型...</A><BR>·
<A title=利用VC++开发ASP图像处理组件
href="http://www.hsip.cn/article/12/2006/2006031324075.html">利用VC++开发ASP图...</A><BR>·
<A title=利用VC++开发所见即所得的打印程序
href="http://www.hsip.cn/article/12/2006/2006031424074.html">利用VC++开发所见...</A><BR></TD></TR></TBODY></TABLE></TD>
<TD class=tableright align=right width=588>
<TABLE style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellSpacing=0
cellPadding=0 width=575 border=0>
<TBODY>
<TR>
<TD style="FONT-SIZE: 12pt; COLOR: #ff6600" align=middle
height=32>用VC++遍历目录</TD></TR>
<TR>
<TD align=middle background=用VC++遍历目录----源码下载网.files/soft_c.gif
height=25>作者:佚名 来源:不详 发布时间:2006-3-14
10:38:15 发布人:baiyun</TD></TR>
<SCRIPT language=javascript>
var newasp_fontsize=9;
var newasp_lineheight=12;
</SCRIPT>
<TR>
<TD>
<P align=right><A title=减小字体
style="CURSOR: hand; POSITION: relative"
onclick='if(newasp_fontsize>8){NewaspContentLabel.style.fontSize=(--newasp_fontsize)+"pt";NewaspContentLabel.style.lineHeight=(--newasp_lineheight)+"pt";}'><IMG
height=15 src="用VC++遍历目录----源码下载网.files/1.gif" width=15
border=0><FONT color=#ff6600>减小字体</FONT></A> <A title=增大字体
style="CURSOR: hand; POSITION: relative"
onclick='if(newasp_fontsize<64){NewaspContentLabel.style.fontSize=(++newasp_fontsize)+"pt";NewaspContentLabel.style.lineHeight=(++newasp_lineheight)+"pt";}'><IMG
height=15 src="用VC++遍历目录----源码下载网.files/2.gif" width=15
border=0><FONT color=#ff6600>增大字体</FONT></A> </P>
<DIV class=ContentFont id=NewaspContentLabel
style="PADDING-RIGHT: 10px; DISPLAY: block; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px"><FONT
id=font_word
style="FONT-SIZE: 14px; FONT-FAMILY: 宋体, Verdana, Arial, Helvetica, sans-serif">
<DIV style="DISPLAY: inline; FLOAT: left"></DIV>河南洛阳
祝晓鹰 <BR><BR>----
所谓遍历目录,就是给定一个目录,访问其中的所有文件(包括子目录下的文件)。迭代是比较常用的遍历算法。本文利用C++面向对象的特性,通过一个类CBrowseDir,对目录遍历进行了封装。用户只需掌握该类四个成员函数的用法,就可以在自己的程序中,很方便地实现目录遍历。
<BR><BR>----
类CBrowseDir使用了迭代算法。因为算法不是本文重点,笔者不打算展开进一步讨论,对其感兴趣者可参考相关资料。
<BR><BR>一、类成员函数说明: <BR><BR>---- bool SetInitDir(const char *dir);
<BR><BR>---- 功能:设置要遍历的目录。 <BR><BR>---- 参数:dir
指向要遍历的目录,可以使用相对路径,比如"d:..\hawk";还可以使用网络路径,比如"\\wf\d\hawk"(其中wf是主机名,d是共享目录,hawk是目录)。
<BR><BR>---- 返回值:返回true,表示设置成功;返回false,说明目录不可用。 <BR><BR>---- bool
BeginBrowse(const char *filespec); <BR><BR>----
功能:开始遍历目录中由filespec指定的文件(包括隐藏文件)。 <BR><BR>---- 参数:filespec
指定文件类型,可以使用通配符*和?,比如"*.exe"或"a?.*"都是合法参数。注意:filespec中不能包含路径,象"hawk\*.*"是错误的。
<BR><BR>---- 返回值:函数返回true,表明已顺利遍历完所有文件;返回false,遍历过程被用户中止。
<BR><BR>---- virtual bool ProcessFile(const char *filename);
<BR><BR>----
功能:虚函数。每找到一个文件,程序就会调用ProcessFile,并把文件名作为参数传递给函数。如果函数返回false,则强制遍历中止,并导致类成员函数函数BeginBrowse返回false。
用户应该覆写此函数,以加入自己的处理代码。 <BR><BR>---- 参数:filename
指向一个文件名。注意:filename使用绝对路径。 <BR><BR>---- 返回值:返回true,继续遍历;否则,中止遍历。
<BR><BR>---- virtual void ProcessDir (const char *currentdir,const
char *parentdir); <BR><BR>----
功能:虚函数。在遍历过程中,每进入一个子目录,程序就会调用ProcessDir,并把目录名及其上一级目录名作为参数传递给函数。如果该目录是成员函数SetInitDir指定的初始目录,则parentdir=NULL。用户可以覆写此函数,以加入自己的处理代码。比如可以在这里统计子目录的个数。
<BR><BR>---- 参数:currentdir 指向一个子目录。 <BR>---- parentdir
指向currentdir的父目录。 <BR>---- 注意:currentdir和parentdir均使用绝对路径。
<BR><BR>二、使用: <BR><BR>----
把类CBrowseDir的头文件BrowseDir.h及实现文件BrowseDir.cpp加到项目(Project)中,然后派生自己的类并覆写虚函数ProcessFile和ProcessDir。遍历目录时,先构造一个派生类对象,用成员函数SetInitDir指定目录,然后调用BeginBrowse开始遍历。
<BR><BR>---- 本文提供了一个例子
example.cpp,它从CBrowseDir派生出子类CStatDir,通过统计函数ProcessFile及ProcessDir的调用次数,可以得知目录中的文件及子目录个数。程序都有注释,这里就不再罗嗦了。
<BR><BR>三、注意事项: <BR><BR>---- 1.
类CBrowseDir会改变当前工作目录。同一个相对路径,使用CBrowseDir前后,可能会有不同的含义。因此用户编程时,要小心使用相对路径。
<BR><BR>---- 2.
如果项目(Project)是一个MFC应用程序,直接加入BrowseDir.h及BrowseDir.cpp会导致编译出错。这是因为缺省情况下,MFC项目使用了预编译头(Precompiled
Header),而BrowseDir.h和BrowseDir.cpp是用标准C++语句编写的,没用预编译。一个解决办法是先用类向导生成类CBrowseDir的"架子",再把相应的代码拷贝过去。
<BR><BR>---- 本文代码均在Win95、Visual C++ 5.0环境下调试通过。
<BR><BR>附源代码:<BR><BR>/**************************************************<BR> 这是CBrowseDir的类定义文件
BrowseDir.h
<BR><BR>/**************************************************<BR>#include
"stdlib.h"<BR><BR>class
CBrowseDir<BR>{<BR>protected:<BR>//存放初始目录的绝对路径,以'\'结尾<BR>char
m_szInitDir[_MAX_PATH];<BR><BR>public:<BR>//缺省构造器<BR>CBrowseDir();<BR><BR>//设置初始目录为dir,如果返回false,表示目录不可用<BR>bool
SetInitDir(const char
*dir);<BR><BR>//开始遍历初始目录及其子目录下由filespec指定类型的文件<BR>//filespec可以使用通配符
* ?,不能包含路径。<BR>//如果返回false,表示遍历过程被用户中止<BR>bool BeginBrowse(const
char
*filespec);<BR><BR>protected:<BR>//遍历目录dir下由filespec指定的文件<BR>//对于子目录,采用迭代的方法<BR>//如果返回false,表示中止遍历文件<BR>bool
BrowseDir(const char *dir,const char
*filespec);<BR><BR>//函数BrowseDir每找到一个文件,就调用ProcessFile<BR>//并把文件名作为参数传递过去<BR>//如果返回false,表示中止遍历文件<BR>//用户可以覆写该函数,加入自己的处理代码<BR>virtual
bool ProcessFile(const char
*filename);<BR><BR>//函数BrowseDir每进入一个目录,就调用ProcessDir<BR>//并把正在处理的目录名及上一级目录名作为参数传递过去<BR>//如果正在处理的是初始目录,则parentdir=NULL<BR>//用户可以覆写该函数,加入自己的处理代码<BR>//比如用户可以在这里统计子目录的个数<BR>virtual
void ProcessDir(const char <BR>*currentdir,const char
*parentdir);<BR>};<BR><BR><BR>/*********************************************/<BR><BR>这是CBrowseDir的类实现文件
BrowseDir.cpp<BR><BR>/***********************************************/<BR>#include
"stdlib.h"<BR>#include "direct.h"<BR>#include "string.h"<BR>#include
"io.h"<BR><BR>#include
"browsedir.h"<BR><BR>CBrowseDir::CBrowseDir()<BR>{<BR>//用当前目录初始化m_szInitDir<BR>getcwd(m_szInitDir,_MAX_PATH);<BR><BR>//如果目录的最后一个字母不是'\',则在最后加上一个'\'<BR>int
len=strlen(m_szInitDir);<BR>if (m_szInitDir[len-1] !=
'\\')<BR>strcat(m_szInitDir,"\\");<BR>}<BR><BR>bool
CBrowseDir::SetInitDir(const char *dir)<BR>{<BR>//先把dir转换为绝对路径<BR>if
(_fullpath(m_szInitDir,dir,_MAX_PATH) == NULL)<BR>return
false;<BR><BR>//判断目录是否存在<BR>if (_chdir(m_szInitDir) != 0)<BR>return
false;<BR><BR>//如果目录的最后一个字母不是'\',则在最后加上一个'\'<BR>int
len=strlen(m_szInitDir);<BR>if (m_szInitDir[len-1] !=
'\\')<BR>strcat(m_szInitDir,"\\");<BR><BR>return
true;<BR>}<BR><BR>bool CBrowseDir::BeginBrowse(const char
*filespec)<BR>{<BR>ProcessDir(m_szInitDir,NULL);<BR>return
BrowseDir(m_szInitDir,filespec);<BR>}<BR><BR>bool
CBrowseDir::BrowseDir<BR>(const char *dir,const char
*filespec)<BR>{<BR>_chdir(dir);<BR><BR>//首先查找dir中符合要求的文件<BR>long
hFile;<BR>_finddata_t fileinfo;<BR>if
((hFile=_findfirst(filespec,&fileinfo)) !=
-1)<BR>{<BR>do<BR>{<BR>//检查是不是目录<BR>//如果不是,则进行处理<BR>if
(!(fileinfo.attrib & _A_SUBDIR))<BR>{<BR>char
filename[_MAX_PATH];<BR>strcpy(filename,dir);<BR>strcat(filename,fileinfo.name);<BR>if
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -