vb.net用api搜索文件却找不到任何文件,问题出在哪里?
清风不拂面 2020-08-22 11:14:34 Public Structure Win32FindData
Dim dwFileAttributes As Long '文件属性
Dim ftCreationTime As ComTypes.FILETIME '文件创建时间
Dim ftLastAccessTime As ComTypes.FILETIME '文件最后一次访问时间
Dim ftLastWriteTime As ComTypes.FILETIME '文件最后一次修改时间
Dim nFileSizeHigh As Long '文件长度高32位
Dim nFileSizeLow As Long '文件长度低32位
Dim dwReserved0 As Long '系统保留
Dim dwReserved1 As Long '系统保留
Dim cFileName As String ' *MAX_PATH'长文件名
Dim cAlternate As String '*14'8.3格式文件名
End Structure
<DllImport("kernel32.dll", CharSet:=CharSet.Auto, SetLastError:=True, ExactSpelling:=True)>
Public Shared Function FindFirstFileA(ByVal pFileName As String, ByRef pFindFileData As Win32FindData) As IntPtr
End Function
'<DllImport("kernel32.dll", CharSet:=CharSet.Auto, SetLastError:=True, ExactSpelling:=True)>
Public Shared Function FindNextFileA(ByRef hndFindFile As IntPtr, ByRef pFindFileData As Win32FindData) As IntPtr
End Function
'<DllImport("kernel32.dll", CharSet:=CharSet.Auto, SetLastError:=True, ExactSpelling:=True)>
Public Shared Function FindClose(ByRef hndFindFile As IntPtr) As IntPtr
End Function
Public Sub getFilesInDirsApi(ByVal strSearchPath As String, ByVal strSearchExt As String, ByVal strSearchKey As String)
Dim wfdFiles As New Win32FindData
Dim inpSearch As IntPtr '搜索句柄变量
Dim INVALID_HANDLE_VALUE As IntPtr = New IntPtr(-1)
Dim listResult As New List(Of String)
'查找第一个文件
inpSearch = FindFirstFileA(strSearchPath & "*.*", wfdFiles)
If inpSearch <> INVALID_HANDLE_VALUE Then
If wfdFiles.dwFileAttributes <> FileAttributes.Directory Then '不是目录
strFileName = wfdFiles.cFileName
strFileExt = Strings.Right(strFileName, strFileName.Length - Strings.InStrRev(strFileName, ".") + 1)
If strFileExt <> "" AndAlso strSearchExt.Contains(strFileExt) Then
listResult.Add(strSearchPath & strFileName)
End If
Else
getFilesInDirsApi(strSearchPath, strSearchExt, strSearchKey)
End If
'查找后面的文件
While FindNextFileA(inpSearch, wfdFiles)
If wfdFiles.dwFileAttributes <> FileAttributes.Directory Then '不是目录
strFileName = wfdFiles.cFileName
strFileExt = Strings.Right(strFileName, strFileName.Length - Strings.InStrRev(strFileName, ".") + 1)
If strFileExt <> "" AndAlso strSearchExt.Contains(strFileExt) Then
listResult.Add(strSearchPath & strFileName)
End If
Else
getFilesInDirsApi(strSearchPath, strSearchExt, strSearchKey)
End If
End While
end sub