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


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

主题:请教查找文件

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/3 11:56:00 [显示全部帖子]


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/3 20:05:00 [显示全部帖子]

以下是引用hbhb在2019/1/3 19:11:00的发言:
谢谢!直接返回一个集合,怎么改全局代码?

 

认认真真看懂2楼,测试对应的代码。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/4 12:04:00 [显示全部帖子]

你调用的时候,可以设置后缀名的啊

 

Public Function EnumerateFiles(ByVal path As String, ByVal Optional searchPattern As String = "*.*", ByVal Optional searchOption As IO.SearchOption = IO.SearchOption.AllDirectories)


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/4 15:50:00 [显示全部帖子]

调用代码

 

_list.clear
EnumerateFiles("d:\", "*.mdb")
msgbox(_list.count)

 

全局代码

 

Public _list As new List(of String)

<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 Function EnumerateFiles(ByVal path As String, ByVal Optional searchPattern 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
            EnumerateFiles(io.Path.Combine(path, FindFileData.cFileName))
        Else
            _list.add(io.Path.Combine(path, FindFileData.cFileName))
        End If
    Loop While FindNextFile(hFind, FindFileData)
    FindClose(hFind)
   
End If
If searchPattern <> "*.*" Then
    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
                EnumerateFiles(io.Path.Combine(path, FindFileData.cFileName), searchPattern)
            Else
                '_list.add(io.Path.Combine(path, FindFileData.cFileName))
            End If
        Loop While FindNextFile(hFind, FindFileData)
        FindClose(hFind)
    End If
End If

End Function


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/13 22:54:00 [显示全部帖子]

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

 

9楼代码就是这样。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/14 9:08:00 [显示全部帖子]

这样调用啊

 

_list.clear
EnumerateFiles("c:\windows\system32\UFSystem\", "*.mdb")
msgbox(_list.count)

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/14 10:51:00 [显示全部帖子]

以下是引用hbhb在2019/1/14 10:34:00的发言:
知道,我的意思不是这样的,就是有的数据库文件,不知道他的路径,需要搜索,如果搜索*.mdb,时间很长。如果提供*.mdb的目录,搜索时间应该会快一点。也就是倒查。

 

无法理解你的意思。无论你提供什么,都是需要循环每一个目录、每一个文件这样去查的。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/14 12:02:00 [显示全部帖子]

以下是引用hbhb在2019/1/14 11:12:00的发言:
那请问,在所有盘中,搜索*.mdb  与搜索UFSystem\UFSystem.mdb的时间是否一样?

 

基本一样。

 

1、不知道你 UFSystem 在哪个文件夹下,也要全部文件夹一层一层查找;

 

2、UFSystem.mdb 比 *.mdb 好一点,快一点,但影响不大。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/14 14:55:00 [显示全部帖子]

以下是引用hbhb在2019/1/14 12:35:00的发言:
那最快的速度找到UFSystem.mdb文件的代码有没有?

 

没有。必须循环每一个文件夹,循环每一个文件,才能找到。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/14 17:04:00 [显示全部帖子]

以下是引用hbhb在2019/1/14 16:41:00的发言:
那如何判断目录是不是文件夹?怎么判定?

 

'如果是文件夹

If  searchOption = io.SearchOption.AllDirectories AndAlso ((FindFileData.dwFileAttributes And io.FileAttributes.Directory) = io.FileAttributes.Directory) Then

 
Else '否则

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