成人免费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

2010-01-19 18:24:29

VB.NET調用Win

2009-11-03 13:02:28

VB.NET Wind

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√ | 国产99久久精品一区二区永久免费 | 午夜久久av | 精品一二三区在线观看 | 一级片在线免费播放 | 免费激情| 亚洲成人一二区 | 天堂av中文在线 | 精品国产区| 国产一级视频在线播放 | 免费看片在线播放 | 亚洲人一区 | 中文字幕一级毛片 | 久久只有精品 | 福利一区二区 | 九九99精品 | 亚洲精品粉嫩美女一区 | 国产三区四区 | 久久av影院 | 天堂在线www| 国产japanhdxxxx麻豆 | 欧美99久久精品乱码影视 | 在线资源视频 | 7777在线 | 91p在线观看| 日韩一级免费电影 | 免费亚洲视频 | 国产精品国产馆在线真实露脸 | 人操人免费视频 | 久久网一区二区 |