Foxtable(狐表)用户栏目专家坐堂 → 大师:能否给一个实例


  共有1923人关注过本帖树形打印复制链接

主题:大师:能否给一个实例

帅哥哟,离线,有人找我吗?
hbhb
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
大师:能否给一个实例  发帖心情 Post By:2019/9/18 9:27:00 [只看该作者]

大师:我想实现根据指定目录和文件后缀名,搜索某个文件的功能,再加一个停止搜索的按钮,可以随时停止?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105473 积分:536350 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/18 10:13:00 [只看该作者]

For Each File As String In FileSys.GetFiles("C:\")
    If file.EndsWith(".jpg") Then
        Output.Show(File)
    End If
    Application.Doevents
    If vars("exit") = True Then Exit For
Next

停止按钮
vars("exit") = true

 回到顶部
帅哥哟,离线,有人找我吗?
hbhb
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2019/9/18 11:37:00 [只看该作者]

谢谢!我要搜索目录下所有子目录(一直到最末级)的,怎么写?
Application.Doevents,即刻暂停的是那句代码?


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105473 积分:536350 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/18 11:45:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
hbhb
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2019/9/18 17:10:00 [只看该作者]

谢谢!那请问停止的代码写在哪里?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105473 积分:536350 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/18 17:38:00 [只看该作者]

比如

 Do
If vars("stop") = True Then 
if MessageBox.Show("已暂停,按是继续,按否退出查找!", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes then
 vars("stop") = false
else
exit do
endif
end if
        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))
            EnumerateFiles(io.Path.Combine(path, FindFileData.cFileName))
        Else
            output.show(io.Path.Combine(path, FindFileData.cFileName))
        End If

    Loop While FindNextFile(hFind, FindFileData)
    FindClose(hFind)

 回到顶部
帅哥哟,离线,有人找我吗?
hbhb
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2019/9/18 21:10:00 [只看该作者]

比如一个按钮是开始,一个按钮是暂停,关键是点击开始按钮后,点击暂停按钮,不立即生效,焦点一直在开始按钮上。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105473 积分:536350 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/19 13:36:00 [只看该作者]

全局代码

<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

 回到顶部
帅哥哟,离线,有人找我吗?
hbhb
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2019/9/19 17:48:00 [只看该作者]

谢谢!那加两个参数把output.show(io.Path.Combine(path, FindFileData.cFileName)) 输出到指定的窗口的标签中显示?是否会影响搜索效率?

 回到顶部
帅哥哟,离线,有人找我吗?
zhy400137
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1131 积分:8199 威望:0 精华:0 注册:2013/11/3 19:00:00
  发帖心情 Post By:2019/9/19 18:46:00 [只看该作者]

mark

 回到顶部
总数 11 1 2 下一页