电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 站长之家-> 网络编辑
如何在vb中实现目录遍历_visualbasic教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
一、API函数的声明、自定义数据类型及常量的定义
----注意:API函数的声明应在应用程序的代码模块中进行,且一条声明必须放在一行中API函数的声明
PublicDeclareFunctionFindFirstFileLib
"kernel32"Alias"FindFirstFileA"
(ByVallpFileNameAsString,
lpFindFileDataAsWIN32_FIND_DATA)AsLong
PublicDeclareFunctionFindNextFileLib
"kernel32"Alias"FindNextFileA"
(ByValhFindFileAsLong,lpFindFileData
AsWIN32_FIND_DATA)AsLong
PublicDeclareFunctionFindCloseLib
"kernel32"(ByValhFindFileAsLong)AsLong

最大路径长度和文件属性常量的定义
PublicConstMAX_PATH=260
PublicConstFILE_ATTRIBUTE_ARCHIVE=&H20
PublicConstFILE_ATTRIBUTE_COMPRESSED=&H800
PublicConstFILE_ATTRIBUTE_DIRECTORY=&H10
PublicConstFILE_ATTRIBUTE_HIDDEN=&H2
PublicConstFILE_ATTRIBUTE_NORMAL=&H80
PublicConstFILE_ATTRIBUTE_READONLY=&H1
PublicConstFILE_ATTRIBUTE_SYSTEM=&H4
PublicConstFILE_ATTRIBUTE_TEMPORARY=&H100

自定义数据类型FILETIME和WIN32_FIND_DATA的定义
PublicTypeFILETIME
dwLowDateTimeAsLong
dwHighDateTimeAsLong
EndType

PublicTypeWIN32_FIND_DATA
dwFileAttributesAsLong
ftCreationTimeAsFILETIME
ftLastAccessTimeAsFILETIME
ftLastWriteTimeAsFILETIME
nFileSizeHighAsLong
nFileSizeLowAsLong
dwReserved0AsLong
dwReserved1AsLong
cFileNameAsString*MAX_PATH
cAlternateAsString*14
EndType

二、去掉固定长度字符串右边的NULL字符(ASCII值为0)和SPACE字符(ASCII值为32)
----由于数据类型WIN32_FIND_DATA的cFileName元素为定长数据类型且在执行函数FindFirstFile和FindNextFile后会有NULL字符,因此需去掉其中的无效字符。
PublicFunctionfDelInvaildChr
(strAsString)AsString
OnErrorResumeNext
Fori=Len(str)To1Step-1
IfAsc(Mid(str,i,1))<>
0AndAsc(Mid(str,i,1))<>32Then
fDelInvaildChr=Left(str,i)
ExitFor
EndIf
Next
EndFunction

三、遍历主函数
----参数说明:
strPathName要遍历的目录
objList使用VB的内部控
件ListBox来存放遍历得到的路径,之所以
不使用字符串数组是因为数组大小不好定义

PublicSubsDirTraversal
(ByValstrPathNameAsString,ByRefobjListAsListBox)
DimsSubDir(200)AsString
存放当前目录下的子目录,下标可根据需要调整
DimiIndexAsInteger
子目录数组下标
DimiAsInteger
用于循环子目录的查找

DimlHandleAsLong
FindFirstFileA的句柄
DimtFindDataAsWIN32_FIND_DATA
DimstrFileNameAsString文件名

OnErrorResumeNext
初始化变量
i=1
iIndex=0
tFindData.cFileName=
""初始化定长字符串

lHandle=FindFirstFile
(strPathName&"\*.*",tFindData)
IflHandle=0Then查询结束或发生错误
ExitSub
EndIf
strFileName=fDelInvaildChr(tFindData.cFileName)
IftFindData.dwFileAttributes=&H10Then目录
IfstrFileName<>"."AndstrFileName<>".."Then
iIndex=iIndex 1
sSubDir(iIndex)=strPathName
&"\"&strFileName添加到目录数组
EndIf
Else
objList.AddItemstrPathName
&"\"&strFileName
EndIf
循环查找下一个文件,直到结束
DoWhileTrue
tFindData.cFileName=""
IfFindNextFile(lHandle,tFindData)
=0Then查询结束或发生错误
FindClose(lHandle)
ExitDo
Else
strFileName=fDelInvaildChr
(tFindData.cFileName)
IftFindData.dwFileAttributes=&H10Then
IfstrFileName<>"."AndstrFileName<>".."Then
iIndex=iIndex 1
sSubDir(iIndex)=strPathName
&"\"&strFileName添加到目录数组
EndIf
Else
objList.AddItemstrPathName&"\"&strFileName
EndIf
EndIf
Loop
如果该目录下有目录,则根据目录数组递归遍历
IfiIndex>0Then
Fori=1ToiIndex
sDirTraversalsSubDir(i),objList
Next
EndIf
EndSub

----利用以上遍历方法,读者可以根据数据类型WIN32_FIND_DATA的dwFileAttributes、ftCreationTime、ftLastAccessTime、ftLastWriteTime元素来扩充文件查询功能(按文件属性、创建日期、最后修改日期、最后访问日期等不同条件的查询)。



完整代码:


API函数的声明、常量、自定义数据类型

API函数的声明
PublicDeclareFunctionFindFirstFileLib"kernel32"Alias"FindFirstFileA"(ByVallpFileNameAsString,lpFindFileDataAsWIN32_FIND_DATA)AsLong
PublicDeclareFunctionFindNextFileLib"kernel32"Alias"FindNextFileA"(ByValhFindFileAsLong,lpFindFileDataAsWIN32_FIND_DATA)AsLong
PublicDeclareFunctionFindCloseLib"kernel32"(ByValhFindFileAsLong)AsLong


最大路径长度和文件属性常量的定义
PublicConstMAX_PATH=260
PublicConstFILE_ATTRIBUTE_ARCHIVE=&H20
PublicConstFILE_ATTRIBUTE_COMPRESSED=&H800
PublicConstFILE_ATTRIBUTE_DIRECTORY=&H10
PublicConstFILE_ATTRIBUTE_HIDDEN=&H2
PublicConstFILE_ATTRIBUTE_NORMAL=&H80
PublicConstFILE_ATTRIBUTE_READONLY=&H1
PublicConstFILE_ATTRIBUTE_SYSTEM=&H4
PublicConstFILE_ATTRIBUTE_TEMPORARY=&H100

自定义数据类型FILETIME和WIN32_FIND_DATA的定义
PublicTypeFILETIME
dwLowDateTimeAsLong
dwHighDateTimeAsLong
EndType

PublicTypeWIN32_FIND_DATA
dwFileAttributesAsLong
ftCreationTimeAsFILETIME
ftLastAccessTimeAsFILETIME
ftLastWriteTimeAsFILETIME
nFileSizeHighAsLong
nFileSizeLowAsLong
dwReserved0AsLong
dwReserved1AsLong
cFileNameAsString*MAX_PATH
cAlternateAsString*14
EndType


去掉固定长度字符串右边的NULL字符(ASCII值为0)和SPACE字符(ASCII值为32)函数

PublicFunctionfDelInvaildChr(strAsString)AsString
OnErrorResumeNext
Fori=Len(str)To1Step-1
IfAsc(Mid(str,i,1))<>0AndAsc(Mid(str,i,1))<>32Then
fDelInvaildChr=Left(str,i)
ExitFor
EndIf
Next
EndFunction


遍历主函数
参数说明:
strPathName要遍历的目录
objList使用VB的内部控件ListBox来存放遍历得到的路径,之所以
不使用字符串数组是因为数组大小不好定义

PublicSubsDirTraversal(ByValstrPathNameAsString,ByRefobjListAsListBox)
DimsSubDir(200)AsString存放当前目录下的子目录,下标可根据需要调整
DimiIndexAsInteger子目录数组下标
DimiAsInteger用于循环子目录的查找

DimlHandleAsLongFindFirstFileA的句柄
DimtFindDataAsWIN32_FIND_DATA
DimstrFileNameAsString文件名

OnErrorResumeNext
初始化变量
i=1
iIndex=0
tFindData.cFileName=""初始化定长字符串

lHandle=FindFirstFile(strPathName&"\*.*",tFindData)
IflHandle=0Then查询结束或发生错误
ExitSub
EndIf
strFileName=fDelInvaildChr(tFindData.cFileName)
IftFindData.dwFileAttributes=&H10Then目录
IfstrFileName<>"."AndstrFileName<>".."Then
iIndex=iIndex 1
sSubDir(iIndex)=strPathName&"\"&strFileName添加到目录数组
EndIf
Else
objList.AddItemstrPathName&"\"&strFileName
EndIf
循环查找下一个文件,直到结束
DoWhileTrue
tFindData.cFileName=""
IfFindNextFile(lHandle,tFindData)=0Then查询结束或发生错误
FindClose(lHandle)
ExitDo
Else
strFileName=fDelInvaildChr(tFindData.cFileName)
IftFindData.dwFileAttributes=&H10Then
IfstrFileName<>"."AndstrFileName<>".."Then
iIndex=iIndex 1
sSubDir(iIndex)=strPathName&"\"&strFileName添加到目录数组
EndIf
Else
objList.AddItemstrPathName&"\"&strFileName
EndIf
EndIf
Loop
如果该目录下有目录,则根据目录数组递归遍历
IfiIndex>0Then
Fori=1ToiIndex
sDirTraversalsSubDir(i),objList
Next
EndIf
EndSub->


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·如何在vb中实现目录遍历_visualbasic教程
·向普通人加密 用php程序保护数据_php技巧
·用photoshop为照片做牙齿美白_photoshop教程
·photoshop路径工具巧绘矢量卡通:女孩与猫_photoshop教程
·局部打开与局部加载_autocad教程
·url的概念与使用_autocad教程
·利用diesel定制状态栏_autocad教程
·用php简单实现search engine friendly的url_php技巧
·用fireworks快速调整人像照片色调_fireworks教程
·photoshop穷人的选择 做个戒指送给她!_photoshop教程

最新文章
·做好一个好的网站策划_网络编辑
·网络编辑必学:网络新闻标题之争_网络编辑
·网络传播中舆论引导的特点分析与实施_网络编辑
·成功经验谈:运营blog的21个具体方法_网络编辑
·网络编辑技能:新闻标题的微观操作策略_网络编辑
·从业一年多的职场笔记:一个网络编辑的自白_网络编辑
·网编必备:搜索引擎优化的基本要素(2)_网络编辑
·网编必备:搜索引擎优化的基本要素(1)_网络编辑
·互联网站从事登载新闻业务管理暂行规定_网络编辑
·中国互联网网络版权自律公约(全文)_网络编辑


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号