Foxtable(狐表)用户栏目专家坐堂 → 请教查找文件


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

主题:请教查找文件

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


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
请教查找文件  发帖心情 Post By:2019/1/3 11:51:00 [显示全部帖子]

大师:请问如何最快的速度,查询出*.mdb文件?

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


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2019/1/3 19:10:00 [显示全部帖子]

谢谢!直接返回一个集合,怎么该全局代码?

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


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2019/1/3 19:11:00 [显示全部帖子]

谢谢!直接返回一个集合,怎么改全局代码?

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


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2019/1/4 11:59: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

Dim a As new List(of String)
Public Function EnumerateFiles(ByVal path As String, ByVal Optional searchPattern As String = "*.*",ByVal Optional zfc As String = ".*", ByVal Optional searchOption As IO.SearchOption = IO.SearchOption.AllDirectories)
Dim hFind As IntPtr = -1
Dim FindFileData As WIN32_FIND_DATA = Nothing
hFind = FindFirstFile(IO.Path.Combine(path, searchPattern), 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))
            EnumerateFiles(io.Path.Combine(path, FindFileData.cFileName),"*.*",zfc)
        Else
            'output.show(io.Path.Combine(path, FindFileData.cFileName))
            Dim b As String = io.Path.Combine(path, FindFileData.cFileName)
            If b.Contains(zfc)  Then
                a.Add(io.Path.Combine(path, FindFileData.cFileName))
            End If
        End If
    Loop While FindNextFile(hFind, FindFileData)
    FindClose(hFind)
    
End If
Return a
End Function

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


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2019/1/4 13:04:00 [显示全部帖子]

如果这样不显示前面路径下的所有的目录及子目录的。我测试过了。另外我要返回一个集合?

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


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2019/1/4 19:30:00 [显示全部帖子]

谢谢!
搜索一硬盘时间太长,
如果要停止搜索,按钮中的代码怎么写?

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


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2019/1/13 21:58:00 [显示全部帖子]

田大师:为了提高查询某个文件的速度,上面的函数的第二个参数,可否这样?
如果输入了带目录和后缀名的文件,比如:狐表\*.mdb,就首先查找狐表目录,然后再在此目录下查找*.mdb文件。这样是否快多了,如何实现?上面的代码如何更改?

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


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2019/1/13 23:45:00 [显示全部帖子]

不是吧,FindFirstFile是查找文件吧,我的意思是首先查找到第二个参数的目录部分,目录不是比文件少多了吗?
_list.clear
EnumerateFiles("c:\", "UFSystem1\UFSystem.mdb")
msgbox(_list.count)
为何要很长时间?




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


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2019/1/13 23:57:00 [显示全部帖子]

一个文件含路径   c:\windows\system32\UFSystem\UFSystem.mdb
为何这样调用
_list.clear
EnumerateFiles("c:\", "windows\system32\UFSystem\UFSystem.mdb")
msgbox(_list.count)
也要一段时间,应该快得很。
也就是说,如果这个参数windows\system32\UFSystem\UFSystem.mdb,目录输入越多,应该越快?越少越慢?

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


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2019/1/14 10:34:00 [显示全部帖子]

知道,我的意思不是这样的,就是有的数据库文件,不知道他的路径,需要搜索,如果搜索*.mdb,时间很长。如果提供*.mdb的目录,搜索时间应该会快一点。也就是倒查。

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