电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 图形图象-> CORELDRAW教程
用api函数遍历指定驱动器、目录的文件_visualbasic教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
以下代码演示了如何用WindowsAPI函数遍历指定驱动器、目录的所有文件。其思路是:调出浏览文件夹窗口让用户指定所要搜索的起始路径,然后用查找文件的API函数遍历该目录下及其包含的子目录下的所有文件。本例需要:一个按钮,一个TextBox和一个ListBox,其中,TextBox应设置为多行。
核心代码参照API-Guide的两个例子程序,特此声明。

OptionExplicit

查找第一个文件的API
PrivateDeclareFunctionFindFirstFileLib"kernel32"Alias"FindFirstFileA"(ByVallpFileNameAsString,lpFindFileDataAsWIN32_FIND_DATA)AsLong
查找下一个文件的API
PrivateDeclareFunctionFindNextFileLib"kernel32"Alias"FindNextFileA"(ByValhFindFileAsLong,lpFindFileDataAsWIN32_FIND_DATA)AsLong
获取文件属性的API
PrivateDeclareFunctionGetFileAttributesLib"kernel32"Alias"GetFileAttributesA"(ByVallpFileNameAsString)AsLong
关闭查找文件的API
PrivateDeclareFunctionFindCloseLib"kernel32"(ByValhFindFileAsLong)AsLong
以下为调用浏览文件夹窗口的API
PrivateDeclareSubCoTaskMemFreeLib"ole32.dll"(ByValhMemAsLong)
PrivateDeclareFunctionlstrcatLib"kernel32"Alias"lstrcatA"(ByVallpString1AsString,ByVallpString2AsString)AsLong
PrivateDeclareFunctionSHBrowseForFolderLib"shell32"(lpbiAsBrowseInfo)AsLong
PrivateDeclareFunctionSHGetPathFromIDListLib"shell32"(ByValpidListAsLong,ByVallpBufferAsString)AsLong

常量
ConstMAX_PATH=260
ConstMAXDWORD=&HFFFF
ConstINVALID_HANDLE_VALUE=-1
ConstFILE_ATTRIBUTE_ARCHIVE=&H20
ConstFILE_ATTRIBUTE_DIRECTORY=&H10
ConstFILE_ATTRIBUTE_HIDDEN=&H2
ConstFILE_ATTRIBUTE_NORMAL=&H80
ConstFILE_ATTRIBUTE_READONLY=&H1
ConstFILE_ATTRIBUTE_SYSTEM=&H4
ConstFILE_ATTRIBUTE_TEMPORARY=&H100
ConstBIF_RETURNONLYFSDIRS=1
PrivateTypeFILETIME
dwLowDateTimeAsLong
dwHighDateTimeAsLong
EndType

定义类(用于查找文件)
PrivateTypeWIN32_FIND_DATA
dwFileAttributesAsLong
ftCreationTimeAsFILETIME
ftLastAccessTimeAsFILETIME
ftLastWriteTimeAsFILETIME
nFileSizeHighAsLong
nFileSizeLowAsLong
dwReserved0AsLong
dwReserved1AsLong
cFileNameAsString*MAX_PATH
cAlternateAsString*14
EndType

定义类(用于浏览文件夹窗口)
PrivateTypeBrowseInfo
hWndOwnerAsLong
pIDLRootAsLong
pszDisplayNameAsLong
lpszTitleAsLong
ulFlagsAsLong
lpfnCallbackAsLong
lParamAsLong
iImageAsLong
EndType

自定义函数
FunctionStripNulls(OriginalStrAsString)AsString
If(InStr(OriginalStr,Chr(0))>0)Then
OriginalStr=Left(OriginalStr,InStr(OriginalStr,Chr(0))-1)
EndIf
StripNulls=OriginalStr
EndFunction

自定义函数
FunctionFindFilesAPI(pathAsString,SearchStrAsString,FileCountAsInteger,_
DirCountAsInteger)
DimFileNameAsString文件名
DimDirNameAsString子目录名
DimdirNames()AsString目录数组
DimnDirAsInteger当前路径的目录数
DimiAsInteger循环计数器变量
DimhSearchAsLong搜索句柄变量
DimWFDAsWIN32_FIND_DATA
DimContAsInteger
IfRight(path,1)<>"\"Thenpath=path&"\"
搜索子目录
nDir=0
ReDimdirNames(nDir)
Cont=True
hSearch=FindFirstFile(path&"*",WFD)
IfhSearch<>INVALID_HANDLE_VALUEThen
DoWhileCont
DirName=StripNulls(WFD.cFileName)
If(DirName<>".")And(DirName<>"..")Then
IfGetFileAttributes(path&DirName)AndFILE_ATTRIBUTE_DIRECTORYThen
dirNames(nDir)=DirName
DirCount=DirCount 1
nDir=nDir 1
ReDimPreservedirNames(nDir)
EndIf
EndIf
Cont=FindNextFile(hSearch,WFD)获取下一个子目录
Loop
Cont=FindClose(hSearch)
EndIf
遍历目录并累计文件总数
hSearch=FindFirstFile(path&SearchStr,WFD)
Cont=True
IfhSearch<>INVALID_HANDLE_VALUEThen
WhileCont
FileName=StripNulls(WFD.cFileName)
If(FileName<>".")And(FileName<>"..")Then
FindFilesAPI=FindFilesAPI (WFD.nFileSizeHigh*MAXDWORD) WFD.nFileSizeLow
FileCount=FileCount 1
List1.AddItempath&FileName
EndIf
Cont=FindNextFile(hSearch,WFD)获取下一个文件
Wend
Cont=FindClose(hSearch)
EndIf
如果子目录存在则遍历之
IfnDir>0Then
Fori=0TonDir-1
FindFilesAPI=FindFilesAPI FindFilesAPI(path&dirNames(i)&"\",_
SearchStr,FileCount,DirCount)
Nexti
EndIf
EndFunction

查找按钮代码
SubCommand1_Click()
DimSearchPathAsString,FindStrAsString
DimFileSizeAsLong
DimNumFilesAsInteger,NumDirsAsInteger
DimiNullAsInteger,lpIDListAsLong,lResultAsLong
DimsPathAsString,udtBIAsBrowseInfo
WithudtBI
设置浏览窗口
.hWndOwner=Me.hWnd
返回选中的目录
.ulFlags=BIF_RETURNONLYFSDIRS
EndWith

调出浏览窗口
lpIDList=SHBrowseForFolder(udtBI)
IflpIDListThen
sPath=String$(MAX_PATH,0)
获取路径
SHGetPathFromIDListlpIDList,sPath
释放内存
CoTaskMemFreelpIDList
iNull=InStr(sPath,vbNullChar)
IfiNullThen
sPath=Left$(sPath,iNull-1)
EndIf
EndIf

Screen.MousePointer=vbHourglass
List1.Clear
SearchPath=sPath选中的目录为搜索的起始路径
FindStr="*.*"搜索所有类型的文件(此处可另作定义)
FileSize=FindFilesAPI(SearchPath,FindStr,NumFiles,NumDirs)
Text1.Text="查找到的文件数:"&NumFiles&vbCrLf&"查找的目录数:"&_
NumDirs 1&vbCrLf&"文件大小总共为:"&vbCrLf&_
Format(FileSize,"#,###,###,##0")&"字节"
Screen.MousePointer=vbDefault
EndSub->


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·coreldraw x3体验:全新复制功能_coreldraw教程
·photoshop绘中秋佳节的一轮明月_photoshop教程
·用vb编程检测当前电池使用情况_visualbasic教程
·解除网虫心病vb做定时断线程序_visualbasic教程
·利用visualbasic实现木马攻击_visualbasic教程
·利用ini文件给程序创建动态菜单_visualbasic教程
·实现窗体内部的左右移动_visualbasic教程
·coreldraw最新版x3之试用手记(1)_coreldraw教程
·photoshop轻松制作图案叠加的文字特效_photoshop教程
·coreldraw滤镜转彩色矢量图为灰度_coreldraw教程

最新文章
·互联网域名资源占用总比荒芜好
·fireworks 8绘制精致指南针图案_fireworks教程
·photoshop素材合成实例:晚霞艺术照_photoshop教程
·在coreldraw中如何保证调色板的颜色相同?_coreldraw教程
·在coreldraw中如何自由擦除线条?_coreldraw教程
·在coreldraw中快速准确地勾好轮廓_coreldraw教程
·如何在coreldraw中快速拷贝色彩和属性?_coreldraw教程
·用coreldraw交互式变形绘制斑斓孔雀_coreldraw教程
·用coreldraw绘可爱monokuro_boo黑白猪图案_coreldraw教程
·coredraw表格导入终极解决方案_coreldraw教程


 
 


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

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

版权所有 西部数码(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号