【问题标题】:Searching entire computer for specified file在整个计算机中搜索指定文件
【发布时间】:2013-09-24 05:52:29
【问题描述】:

有没有办法搜索整个计算机并获取指定文件的完整文件路径,给定一个文件名来匹配?

如果您在文本框中输入例如“file.dat”,它会显示完整的文件路径(如果存在)?

【问题讨论】:

  • 所以您想在整个计算机中搜索一个名为file.dat 的文件?还是只搜索特定位置?或者文件是否位于PATH 中?实际上,不清楚你想做什么。
  • 在整个计算机中搜索指定文件。
  • @Jedi:啊,这是一个完全不同的问题。那时,您没有指定文件 - 您实际上是在指定要在所有驱动器上匹配的模式。
  • 有回复,现在被删除了?

标签: .net vb.net file path


【解决方案1】:

查看System.IO 中的Directory 类。

无论您使用哪种解决方案,请避免使用GetFiles() 而应使用EnumerateFiles(),因为EnumerateFiles() is recommended for large arrays.(在您的情况下是整个C 盘)

根据 MSDN 文档:

当您处理大量目录和文件的集合时,可枚举集合比数组提供更好的性能。

【讨论】:

  • 非常感谢!
【解决方案2】:

试试这个:

Sub Main()
    Dim filesFound = FindAllFiles("*.exe")
    For Each item In filesFound
        Console.WriteLine(item)
    Next
End Sub

Private Function FindAllFiles(filename As String) As List(Of String)
    Dim retVal As New List(Of String)
    For Each item In IO.DriveInfo.GetDrives()
        FindInDirectory(New IO.DirectoryInfo(item.Name), filename, retVal)
    Next
    Return retVal
End Function

Private Sub FindInDirectory(directory As IO.DirectoryInfo, filename As String, filesFound As List(Of String))
    Try
        For Each item In directory.EnumerateFiles(filename)
            filesFound.Add(item.FullName)
        Next
        For Each item In directory.EnumerateDirectories()
            FindInDirectory(item, filename, filesFound)
        Next

    Catch ex As System.IO.IOException
        'Device not ready, most likely a DVD Drive with no media
    Catch ex As System.UnauthorizedAccessException
        ' Directory is not accessable
    End Try
End Sub

请注意,这很慢。您可能希望给您的用户一些指示您当前正在搜索哪个目录(为此修改 FindInDirectory-Function)。

编辑:将 Get-Functions 更改为 Enumerate-Functions,就 alstonp 的建议而言。

【讨论】:

  • 我会试试的。谁降级了?
【解决方案3】:

试试这个:

Dim files() As String = System.IO.Directory.GetFiles("C:\", "file.dat")

【讨论】:

    猜你喜欢
    • 2010-11-06
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 2014-10-27
    • 2011-03-22
    相关资源
    最近更新 更多