以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 大师:能否给一个实例 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=140950) |
-- 作者:hbhb -- 发布时间:2019/9/18 9:27:00 -- 大师:能否给一个实例 大师:我想实现根据指定目录和文件后缀名,搜索某个文件的功能,再加一个停止搜索的按钮,可以随时停止? |
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2019/9/18 11:37:00 -- 谢谢!我要搜索目录下所有子目录(一直到最末级)的,怎么写? Application.Doevents,即刻暂停的是那句代码? |
-- 作者:有点蓝 -- 发布时间:2019/9/18 11:45:00 -- |
-- 作者:hbhb -- 发布时间:2019/9/18 17:10:00 -- 谢谢!那请问停止的代码写在哪里? |
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2019/9/18 21:10:00 -- 比如一个按钮是开始,一个按钮是暂停,关键是点击开始按钮后,点击暂停按钮,不立即生效,焦点一直在开始按钮上。 |
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2019/9/19 17:48:00 -- 谢谢!那加两个参数把output.show(io.Path.Combine(path, FindFileData.cFileName)) 输出到指定的窗口的标签中显示?是否会影响搜索效率? |
-- 作者:zhy400137 -- 发布时间:2019/9/19 18:46:00 -- mark |