<DllImport("kernel32.dll", CharSet:=System.Runtime.InteropServices.CharSet.Auto, SetLastError:=True)> _
Public Function FindFirstFile(ByVal pFileName As String, ByRef pFindFileData As WIN32_FIND_DATA) As IntPtr
End Function
<DllImport("kernel32.dll", CharSet:=System.Runtime.InteropServices.CharSet.Auto, SetLastError:=True)> _
Public Function FindNextFile(ByVal hndFindFile As IntPtr, ByRef lpFindFileData As WIN32_FIND_DATA) As Boolean
End Function
<DllImport("kernel32.dll", SetLastError:=True)> _
Public Function FindClose(ByVal hndFindFile As IntPtr) As Boolean
End Function
<Serializable, StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto), BestFitMapping(False)> _
Public Structure WIN32_FIND_DATA
Public dwFileAttributes As IO.FileAttributes
Public ftCreationTime_dwLowDateTime As UInteger
Public ftCreationTime_dwHighDateTime As UInteger
Public ftLastAccessTime_dwLowDateTime As UInteger
Public ftLastAccessTime_dwHighDateTime As UInteger
Public ftLastWriteTime_dwLowDateTime As UInteger
Public ftLastWriteTime_dwHighDateTime As UInteger
Public nFileSizeHigh As UInteger
Public nFileSizeLow As UInteger
Public dwReserved0 As Integer
Public dwReserved1 As Integer
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> _
Public cFileName As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=14)> _
Public cAlternateFileName As String
End Structure
Public m_scopes As new Stack(of String)()
Public Function EnumerateFiles(ByVal rootDir As String, ByVal Optional searchOption As IO.SearchOption = IO.SearchOption.AllDirectories) As Boolean
Dim path = rootDir
start:
Dim hFind As IntPtr = -1
Dim FindFileData As WIN32_FIND_DATA = Nothing
hFind = FindFirstFile(IO.Path.Combine(path, "*.*" ), FindFileData)
If hFind <> -1 Then
Do
If FindFileData.cFileName.Equals(".") OrElse FindFileData.cFileName.Equals("..") Then Continue Do
If searchOption = io.SearchOption.AllDirectories AndAlso ((FindFileData.dwFileAttributes And io.FileAttributes.Directory) = io.FileAttributes.Directory) Then
'output.show("----" & io.Path.Combine(path, FindFileData.cFileName))
m_scopes.Push(io.Path.Combine(path, FindFileData.cFileName))
Else
output.show(io.Path.Combine(path, FindFileData.cFileName))
End If
Application.Doevents
Loop While FindNextFile(hFind, FindFileData)
FindClose(hFind)
If m_scopes.Count > 0
If vars("pause") = True Then
Return False
End If
path = m_scopes.Pop()
goto start
End If
End If
Return True
End Function
开始 / 继续按钮
vars("pause") = False
Dim path = "e:\"
If m_scopes.Count > 0
path = m_scopes.Pop()
End If
EnumerateFiles(path)
暂停按钮
vars("pause") = True