新聞中心
VB.NET經(jīng)過長時(shí)間的發(fā)展,很多用戶都很了解VB.NET了,這里我來拓展介紹一下VB.NET API函數(shù)的運(yùn)用,讓大家更好的深入了解。

10多年的江陵網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整江陵建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“江陵網(wǎng)站設(shè)計(jì)”,“江陵網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
以下代碼演示了如何用Windows VB.NET API函數(shù)遍歷指定驅(qū)動器、目錄的所有文件。其思路是:調(diào)出瀏覽文件夾窗口讓用戶指定所要搜索的起始路徑,然后用查找文件的API函數(shù)遍歷該目錄下及其包含的子目錄下的所有文件。本例需要:一個(gè)按鈕,一個(gè)TextBox和一個(gè)ListBox,其中,TextBox應(yīng)設(shè)置為多行。
核心代碼參照API-Guide的兩個(gè)例子程序,特此聲明。
Option Explicit
- '查找***個(gè)文件的API
- Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA"
(ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long- '查找下一個(gè)文件的API
- Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA"
(ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long- '獲取文件屬性的API
- Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA"
(ByVal lpFileName As String) As Long- '關(guān)閉查找文件的API
- Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
- '以下為調(diào)用瀏覽文件夾窗口的API
- Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
- Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA"
(ByVal lpString1 As String, ByVal lpString2 As String) As Long- Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
- Private Declare Function SHGetPathFromIDList Lib "shell32"
(ByVal pidList As Long, ByVal lpBuffer As String) As Long- '常量
- Const MAX_PATH = 260
- Const MAXDWORD = &HFFFF
- Const INVALID_HANDLE_VALUE = -1
- Const FILE_ATTRIBUTE_ARCHIVE = &H20
- Const FILE_ATTRIBUTE_DIRECTORY = &H10
- Const FILE_ATTRIBUTE_HIDDEN = &H2
- Const FILE_ATTRIBUTE_NORMAL = &H80
- Const FILE_ATTRIBUTE_READONLY = &H1
- Const FILE_ATTRIBUTE_SYSTEM = &H4
- Const FILE_ATTRIBUTE_TEMPORARY = &H100
- Const BIF_RETURNONLYFSDIRS = 1
- Private Type FILETIME
- dwLowDateTime As Long
- dwHighDateTime As Long
- End Type
- '定義類(用于查找文件)
- Private Type WIN32_FIND_DATA
- dwFileAttributes As Long
- ftCreationTime As FILETIME
- ftLastAccessTime As FILETIME
- ftLastWriteTime As FILETIME
- nFileSizeHigh As Long
- nFileSizeLow As Long
- dwReserved0 As Long
- dwReserved1 As Long
- cFileName As String * MAX_PATH
- cAlternate As String * 14
- End Type
- '定義類(用于瀏覽文件夾窗口)
- Private Type BrowseInfo
- hWndOwner As Long
- pIDLRoot As Long
- pszDisplayName As Long
- lpszTitle As Long
- ulFlags As Long
- lpfnCallback As Long
- lParam As Long
- iImage As Long
- End Type
- '自定義函數(shù)
- Function StripNulls(OriginalStr As String) As String
- If (InStr(OriginalStr, Chr(0)) > 0) Then
- OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
- End If
- StripNulls = OriginalStr
- End Function
- '自定義函數(shù)
- Function FindFilesAPI(path As String, SearchStr As String, FileCount As Integer, _
- DirCount As Integer)
- Dim FileName As String ' 文件名
- Dim DirName As String ' 子目錄名
- Dim dirNames() As String ' 目錄數(shù)組
- Dim nDir As Integer ' 當(dāng)前路徑的目錄數(shù)
- Dim i As Integer ' 循環(huán)計(jì)數(shù)器變量
- Dim hSearch As Long ' 搜索句柄變量
- Dim WFD As WIN32_FIND_DATA
- Dim Cont As Integer
- If Right(path, 1) <> "\" Then pathpath = path & "\"
- '搜索子目錄
- nDir = 0
- ReDim dirNames(nDir)
- Cont = True
- hSearch = FindFirstFile(path & "*", WFD)
- If hSearch <> INVALID_HANDLE_VALUE Then
- Do While Cont
- DirName = StripNulls(WFD.cFileName)
- If (DirName <> ".") And (DirName <> "..") Then
- If GetFileAttributes(path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
- dirNames(nDir) = DirName
- DirCountDirCount = DirCount + 1
- nDirnDir = nDir + 1
- ReDim Preserve dirNames(nDir)
- End If
- End If
- Cont = FindNextFile(hSearch, WFD) '獲取下一個(gè)子目錄
- Loop
- Cont = FindClose(hSearch)
- End If
- ' 遍歷目錄并累計(jì)文件總數(shù)
- hSearch = FindFirstFile(path & SearchStr, WFD)
- Cont = True
- If hSearch <> INVALID_HANDLE_VALUE Then
- While Cont
- FileName = StripNulls(WFD.cFileName)
- If (FileName <> ".") And (FileName <> "..") Then
- FindFilesAPIFindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
- FileCountFileCount = FileCount + 1
- List1.AddItem path & FileName
- End If
- Cont = FindNextFile(hSearch, WFD) ' 獲取下一個(gè)文件
- Wend
- Cont = FindClose(hSearch)
- End If
- '如果子目錄存在則遍歷之
- If nDir > 0 Then
- For i = 0 To nDir - 1
- FindFilesAPIFindFilesAPI = FindFilesAPI + FindFilesAPI(path & dirNames(i) & "\", _
- SearchStr, FileCount, DirCount)
- Next i
- End If
- End Function
- '查找按鈕代碼
- Sub Command1_Click()
- Dim SearchPath As String, FindStr As String
- Dim FileSize As Long
- Dim NumFiles As Integer, NumDirs As Integer
- Dim iNull As Integer, lpIDList As Long, lResult As Long
- Dim sPath As String, udtBI As BrowseInfo
- With udtBI
- '設(shè)置瀏覽窗口
- .hWndOwner = Me.hWnd
- '返回選中的目錄
- .ulFlags = BIF_RETURNONLYFSDIRS
- End With
- '調(diào)出瀏覽窗口
- lpIDList = SHBrowseForFolder(udtBI)
- If lpIDList Then
- sPath = String$(MAX_PATH, 0)
- '獲取路徑
- SHGetPathFromIDList lpIDList, sPath
- '釋放內(nèi)存
- CoTaskMemFree lpIDList
- iNull = InStr(sPath, vbNullChar)
- If iNull Then
- sPath = Left$(sPath, iNull - 1)
- End If
- End If
- Screen.MousePointer = vbHourglass
- List1.Clear
- SearchPath = sPath '選中的目錄為搜索的起始路徑
- FindStr = "*.*" '搜索所有類型的文件(此處可另作定義)
- FileSize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs)
- Text1.Text = "查找到的文件數(shù):" & NumFiles & vbCrLf & "查找的目錄數(shù):" & _
- NumDirs + 1 & vbCrLf & "文件大小總共為:" & vbCrLf & _
- Format(FileSize, "#,###,###,##0") & "字節(jié)"
- Screen.MousePointer = vbDefault
- End Sub
- '調(diào)出瀏覽窗口
- lpIDList = SHBrowseForFolder(udtBI)
- If lpIDList Then
- sPath = String$(MAX_PATH, 0)
- '獲取路徑
- SHGetPathFromIDList lpIDList, sPath
- '釋放內(nèi)存
- CoTaskMemFree lpIDList
- iNull = InStr(sPath, vbNullChar)
- If iNull Then
- sPath = Left$(sPath, iNull - 1)
- End If
- End If
- Screen.MousePointer = vbHourglass
- List1.Clear
- SearchPath = sPath '選中的目錄為搜索的起始路徑
- FindStr = "*.*" '搜索所有類型的文件(此處可另作定義)
- FileSize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs)
- Text1.Text = "查找到的文件數(shù):" & NumFiles & vbCrLf & "查找的目錄數(shù):" & _
- NumDirs + 1 & vbCrLf & "文件大小總共為:" & vbCrLf & _
- Format(FileSize, "#,###,###,##0") & "字節(jié)"
- Screen.MousePointer = vbDefault
- End Sub
以上就是VB.NET API函數(shù)的實(shí)例,希望對大家有幫助。
【編輯推薦】
- 強(qiáng)化VB.NET Word文檔創(chuàng)建Document對象
- VB.NET Word對象模型兩大要點(diǎn)介紹
- 全方位VB.NET文件操作和分類講述
- 細(xì)談VB.NET路徑選擇對話框?qū)崿F(xiàn)(API)實(shí)例
- 強(qiáng)化VB.NET編程多線程句柄技巧
文章名稱:如何運(yùn)用VB.NETAPI函數(shù)遍歷實(shí)例
網(wǎng)頁URL:http://fisionsoft.com.cn/article/djgodoj.html


咨詢
建站咨詢
