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


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

主题:请教查找文件

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


加好友 发短信
等级:狐神 帖子:5061 积分:13092 威望:0 精华:0 注册:2014/5/15 21:34:00
请教查找文件  发帖心情 Post By:2019/1/3 11:51:00 [只看该作者]

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

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


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


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


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

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

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


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

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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楼,测试对应的代码。


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


加好友 发短信
等级:狐神 帖子:5061 积分:13092 威望: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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | 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)


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


加好友 发短信
等级:狐神 帖子:5061 积分:13092 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2019/1/4 13:04:00 [只看该作者]

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | 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


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


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

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

 回到顶部
总数 24 1 2 3 下一页