成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何運用VB.NET API函數遍歷實例

開發 后端
文章介紹如何用Windows VB.NET API函數遍歷指定驅動器、目錄的所有文件,運用API函數遍歷該目錄以及參照API-Guide的例子程序。

VB.NET經過長時間的發展,很多用戶都很了解VB.NET了,這里我來拓展介紹一下VB.NET API函數的運用,讓大家更好的深入了解。

以下代碼演示了如何用Windows VB.NET API函數遍歷指定驅動器、目錄的所有文件。其思路是:調出瀏覽文件夾窗口讓用戶指定所要搜索的起始路徑,然后用查找文件的API函數遍歷該目錄下及其包含的子目錄下的所有文件。本例需要:一個按鈕,一個TextBox和一個ListBox,其中,TextBox應設置為多行。
核心代碼參照API-Guide的兩個例子程序,特此聲明。

Option Explicit

  1. '查找***個文件的API  
  2. Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" 
    (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long  
  3. '查找下一個文件的API  
  4. Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" 
    (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long  
  5. '獲取文件屬性的API  
  6. Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" 
    (ByVal lpFileName As String) As Long  
  7. '關閉查找文件的API  
  8. Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long  
  9. '以下為調用瀏覽文件夾窗口的API  
  10. Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)  
  11. Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" 
    (ByVal lpString1 As String, ByVal lpString2 As String) As Long  
  12. Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long  
  13. Private Declare Function SHGetPathFromIDList Lib "shell32" 
    (ByVal pidList As Long, ByVal lpBuffer As String) As Long  
  14. '常量  
  15. Const MAX_PATH = 260 
  16. Const MAXDWORD = &HFFFF  
  17. Const INVALID_HANDLE_VALUE = -1  
  18. Const FILE_ATTRIBUTE_ARCHIVE = &H20  
  19. Const FILE_ATTRIBUTE_DIRECTORY = &H10  
  20. Const FILE_ATTRIBUTE_HIDDEN = &H2  
  21. Const FILE_ATTRIBUTE_NORMAL = &H80  
  22. Const FILE_ATTRIBUTE_READONLY = &H1  
  23. Const FILE_ATTRIBUTE_SYSTEM = &H4  
  24. Const FILE_ATTRIBUTE_TEMPORARY = &H100  
  25. Const BIF_RETURNONLYFSDIRS = 1 
  26. Private Type FILETIME  
  27. dwLowDateTime As Long  
  28. dwHighDateTime As Long  
  29. End Type  
  30. '定義類(用于查找文件)  
  31. Private Type WIN32_FIND_DATA  
  32. dwFileAttributes As Long  
  33. ftCreationTime As FILETIME  
  34. ftLastAccessTime As FILETIME  
  35. ftLastWriteTime As FILETIME  
  36. nFileSizeHigh As Long  
  37. nFileSizeLow As Long  
  38. dwReserved0 As Long  
  39. dwReserved1 As Long  
  40. cFileName As String * MAX_PATH  
  41. cAlternate As String * 14  
  42. End Type  
  43. '定義類(用于瀏覽文件夾窗口)  
  44. Private Type BrowseInfo  
  45. hWndOwner As Long  
  46. pIDLRoot As Long  
  47. pszDisplayName As Long  
  48. lpszTitle As Long  
  49. ulFlags As Long  
  50. lpfnCallback As Long  
  51. lParam As Long  
  52. iImage As Long  
  53. End Type  
  54. '自定義函數  
  55. Function StripNulls(OriginalStr As String) As String  
  56. If (InStr(OriginalStr, Chr(0)) > 0) Then  
  57. OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)  
  58. End If  
  59. StripNulls = OriginalStr 
  60. End Function  
  61. '自定義函數  
  62. Function FindFilesAPI(path As String, SearchStr As String, FileCount As Integer, _  
  63. DirCount As Integer)  
  64. Dim FileName As String ' 文件名  
  65. Dim DirName As String ' 子目錄名  
  66. Dim dirNames() As String ' 目錄數組  
  67. Dim nDir As Integer ' 當前路徑的目錄數  
  68. Dim i As Integer ' 循環計數器變量  
  69. Dim hSearch As Long ' 搜索句柄變量  
  70. Dim WFD As WIN32_FIND_DATA  
  71. Dim Cont As Integer  
  72. If Right(path, 1) <> "\" Then pathpath = path & "\"  
  73. '搜索子目錄  
  74. nDir = 0 
  75. ReDim dirNames(nDir)  
  76. Cont = True 
  77. hSearch = FindFirstFile(path & "*", WFD)  
  78. If hSearch <> INVALID_HANDLE_VALUE Then  
  79. Do While Cont  
  80. DirName = StripNulls(WFD.cFileName)  
  81. If (DirName <> ".") And (DirName <> "..") Then  
  82. If GetFileAttributes(path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then  
  83. dirNames(nDir) = DirName  
  84. DirCountDirCount = DirCount + 1  
  85. nDirnDir = nDir + 1  
  86. ReDim Preserve dirNames(nDir)  
  87. End If  
  88. End If  
  89. Cont = FindNextFile(hSearch, WFD) '獲取下一個子目錄  
  90. Loop  
  91. Cont = FindClose(hSearch)  
  92. End If  
  93. ' 遍歷目錄并累計文件總數  
  94. hSearch = FindFirstFile(path & SearchStr, WFD)  
  95. Cont = True 
  96. If hSearch <> INVALID_HANDLE_VALUE Then  
  97. While Cont  
  98. FileName = StripNulls(WFD.cFileName)  
  99. If (FileName <> ".") And (FileName <> "..") Then  
  100. FindFilesAPIFindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow  
  101. FileCountFileCount = FileCount + 1  
  102. List1.AddItem path & FileName  
  103. End If  
  104. Cont = FindNextFile(hSearch, WFD) ' 獲取下一個文件  
  105. Wend  
  106. Cont = FindClose(hSearch)  
  107. End If  
  108. '如果子目錄存在則遍歷之  
  109. If nDir > 0 Then  
  110. For i = 0 To nDir - 1  
  111. FindFilesAPIFindFilesAPI = FindFilesAPI + FindFilesAPI(path & dirNames(i) & "\", _  
  112. SearchStr, FileCount, DirCount)  
  113. Next i  
  114. End If  
  115. End Function  
  116. '查找按鈕代碼  
  117. Sub Command1_Click()  
  118. Dim SearchPath As String, FindStr As String  
  119. Dim FileSize As Long  
  120. Dim NumFiles As Integer, NumDirs As Integer  
  121. Dim iNull As Integer, lpIDList As Long, lResult As Long  
  122. Dim sPath As String, udtBI As BrowseInfo  
  123. With udtBI  
  124. '設置瀏覽窗口  
  125. .hWndOwner = Me.hWnd  
  126. '返回選中的目錄  
  127. .ulFlags = BIF_RETURNONLYFSDIRS 
  128. End With  
  129. '調出瀏覽窗口  
  130. lpIDList = SHBrowseForFolder(udtBI)  
  131. If lpIDList Then  
  132. sPath = String$(MAX_PATH, 0)  
  133. '獲取路徑  
  134. SHGetPathFromIDList lpIDList, sPath  
  135. '釋放內存  
  136. CoTaskMemFree lpIDList  
  137. iNull = InStr(sPath, vbNullChar)  
  138. If iNull Then  
  139. sPath = Left$(sPath, iNull - 1)  
  140. End If  
  141. End If  
  142. Screen.MousePointer = vbHourglass 
  143. List1.Clear  
  144. SearchPath = sPath '選中的目錄為搜索的起始路徑  
  145. FindStr = "*.*" '搜索所有類型的文件(此處可另作定義)  
  146. FileSize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs)  
  147. Text1.Text = "查找到的文件數:" & NumFiles & vbCrLf & "查找的目錄數:" & _  
  148. NumDirs + 1 & vbCrLf & "文件大小總共為:" & vbCrLf & _  
  149. Format(FileSize, "#,###,###,##0") & "字節"  
  150. Screen.MousePointer = vbDefault 
  151. End Sub   
  152. '調出瀏覽窗口  
  153. lpIDList = SHBrowseForFolder(udtBI)  
  154. If lpIDList Then  
  155. sPath = String$(MAX_PATH, 0)  
  156. '獲取路徑  
  157. SHGetPathFromIDList lpIDList, sPath  
  158. '釋放內存  
  159. CoTaskMemFree lpIDList  
  160. iNull = InStr(sPath, vbNullChar)  
  161. If iNull Then  
  162. sPath = Left$(sPath, iNull - 1)  
  163. End If  
  164. End If  
  165. Screen.MousePointer = vbHourglass 
  166. List1.Clear  
  167. SearchPath = sPath '選中的目錄為搜索的起始路徑  
  168. FindStr = "*.*" '搜索所有類型的文件(此處可另作定義)  
  169. FileSize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs)  
  170. Text1.Text = "查找到的文件數:" & NumFiles & vbCrLf & "查找的目錄數:" & _  
  171. NumDirs + 1 & vbCrLf & "文件大小總共為:" & vbCrLf & _  
  172. Format(FileSize, "#,###,###,##0") & "字節"  
  173. Screen.MousePointer = vbDefault 
  174. End Sub    

以上就是VB.NET API函數的實例,希望對大家有幫助。

【編輯推薦】

  1. 強化VB.NET Word文檔創建Document對象
  2. VB.NET Word對象模型兩大要點介紹
  3. 全方位VB.NET文件操作和分類講述
  4. 細談VB.NET路徑選擇對話框實現(API)實例
  5. 強化VB.NET編程多線程句柄技巧
責任編輯:田樹 來源: 重慶IT商網
相關推薦

2009-10-28 15:01:59

VB.NET SHEL

2009-10-26 10:44:27

VB.NET API函

2009-10-15 17:50:48

VB.NET調用API

2009-11-04 11:32:20

VB.NET回調函數

2009-11-03 12:52:38

VB.NET Wind

2009-11-02 10:30:37

VB.NET EXCE

2009-10-23 10:01:28

VB.NET申明Win

2009-11-03 09:37:33

VB.NET重載

2009-10-21 10:45:50

VB.NET Quic

2009-11-03 13:02:28

VB.NET Wind

2010-01-19 18:24:29

VB.NET調用Win

2010-01-18 18:20:49

VB.NET使用API

2009-10-29 16:29:02

VB.NET文件系統對

2009-10-15 17:50:48

VB.NET Spli

2009-10-28 14:13:32

VB.NET File

2009-10-28 14:34:44

VB.NET Tree

2009-11-10 15:52:20

VB.NET變量名

2009-11-02 11:02:58

VB.NET XML文

2010-01-18 10:33:28

VB.NET基本函數

2009-11-02 13:14:18

VB.NET函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品欧美一区二区 | 在线天堂免费中文字幕视频 | 亚洲精品资源 | 欧美成人a∨高清免费观看 色999日韩 | 国产免费一区二区三区 | 中文字幕不卡视频在线观看 | 91在线免费视频 | 欧美一级精品片在线看 | 国内精品视频免费观看 | 精品国产一区二区三区久久影院 | 成人3d动漫一区二区三区91 | 请别相信他免费喜剧电影在线观看 | 成人免费看电影 | 成人影视网址 | 欧美日一区 | 国产精品视频一区二区三区 | 欧美区在线 | 久久久久久综合 | h视频在线观看免费 | 日本午夜免费福利视频 | 成人福利在线 | 日本大片在线播放 | 欧美性猛交一区二区三区精品 | 国产高清在线视频 | 蜜臀久久99精品久久久久久宅男 | 99精品视频网 | 亚洲精品免费观看 | 国产乱码精品一区二区三区中文 | 欧洲精品视频一区 | 男人av网| 久久亚洲一区 | 免费视频成人国产精品网站 | 亚洲一区二区三区视频在线 | 午夜羞羞| 亚洲高清一区二区三区 | 一区二区视频在线 | 亚洲综合色视频在线观看 | 日本久久精品视频 | 国产成人免费视频网站视频社区 | 成人亚洲精品 | 在线免费激情视频 |