【问题标题】:VB Wildcard filepath filesystem.dir matchVB通配符文件路径filesystem.dir匹配
【发布时间】:2018-04-28 23:04:07
【问题描述】:

尝试创建一个程序,该程序将根据通配符搜索在目录中查找文件夹,并将找到的所有文件结果到列表框。我似乎在查找类似于文本框中输入名称的文件夹时遇到了一些问题。

举个荒谬的例子:
文本框条目是“Cats and D”
文件名 = "\猫狗搞笑\"
该文件充满了一堆很棒的猫狗图片和视频(在单独的子文件夹中),我想将视频作为单击按钮时获得的 .fullname 放在列表框中

我似乎遇到的问题(除了草率和对此有些新意)正在获得与通配符文件夹匹配的找到的结果。下面是我的脚本的精简版。任何帮助将不胜感激。

[VB]

Private Sub Button1_Click (sender As Object, e As EventArgs) Handles Button1.Click

Dim tbxCont, fipath As String  
Dim di As System.IO.DirectoryInfo  
Dim diar As System.IO.FileInfo

tbxCont = TextBox1.Text
fipath = "C:Users\RandomUser\Desktop\" 

If txbCont = Nothing Then  
MsgBox("Please provide a name",MsgBoxStyle.OkOnly)  
Exit Sub  
Else  
If FileSystem.Dir(fipath & txbCont.Substring(0, txbCont.Length - 4) & "*", FileAttribute.Directory) <> "" Then  
di = New System.IO.DirectoryInfo(fipath & txbCont.Substring(0, txbCont.Length - 4) & "*" & "\Videos\")
For Each diar In di.GetFiles("*", searchOption:=IO.SearchOption.AllDirectories)  
FileList.Items.Add(diar.FullName)  
Next  
Exit Sub
End If

End Sub

它似乎没有使用通配符来查找类似的文件。有没有更好的方法可以解决这个问题?或者,有可能从找到的东西中得到找到的结果?

非常感谢。

【问题讨论】:

    标签: vb.net listbox wildcard file-search


    【解决方案1】:

    我假设Filename = "\Cats and Dogs Funnies\" 表示DirectoryName= "Cats and Dogs Funnies"

    您应该首先检查用户提供的搜索模式是否可以映射到现有目录。
    如果没有,则通知输入的部分路径找不到并返回。
    如果存在,请将“视频”子文件夹添加到路径,列出此组合路径包含的所有文件,并将文件 FullName 添加到列表框控件。

    (当然,需要进行一些错误处理,首先要验证使用通配符的目录过滤器是否确实返回了想要的结果)。

    这是一个可能的解决方案:

    If TextBox1.Text.Trim().Length = 0 Then
        MsgBox("Please provide a name", MsgBoxStyle.OkOnly)
        Exit Sub
    End If
    
    Dim txtCont As String = "*" & TextBox1.Text & "*"
    Dim DirectoryBase As String = "C:\Users\RandomUser\Desktop\"
    
    Dim DirInfo As DirectoryInfo = New DirectoryInfo(DirectoryBase)
    Dim dInfoSearchFolder As DirectoryInfo =
        DirInfo.GetDirectories(txtCont, SearchOption.AllDirectories).FirstOrDefault
    
    If IsNothing(dInfoSearchFolder) Then
        'Notify that the search path was not found
    End If
    
    dInfoSearchFolder = New DirectoryInfo(Path.Combine(dInfoSearchFolder.FullName, "Videos"))
    FileList.Items.AddRange(dInfoSearchFolder.GetFiles().Select(Function(f) f.FullName).ToArray())
    

    【讨论】:

    • 感谢您的回复@Jimi。在应用上述内容时,它现在认为我的搜索目录是“C:\Videos”。在这种情况下,我要使用的文件结构是“C:\Users\[UserName]\Desktop\Cats and Dogs Funnies\Videos\”,但我希望能够输入部分名称,例如“Cats and D”进入我的文本框以生成此文件。
    • @buelianvaluz 正如我所写:需要一些错误处理。您必须为DirectoryBase 提供一个实际(现有)路径。现在在代码中指定的是临时路径。不检查此硬编码路径是否有效。你插入的路径是什么?另外,请使用代码,因此如果必须调整某些内容,我们会在同一页面上。
    • @buelianvaluz 那么DirectoryBase应该是C:\Users\[UserName]\Desktop
    • System.NullReferenceException: '对象引用未设置为对象的实例。'
    • @buelianvaluz 写下您用于DirectoryBase 的实际路径。
    【解决方案2】:

    感谢@Jimi 编辑通配符搜索

    If TextBox1.Text.Trim().Length = 0 Then
        MsgBox("Please provide a name", MsgBoxStyle.OkOnly)
        Exit Sub
    End If
    
    Dim txtCont As String = TextBox1.Text.Substring(0, TextBox1.Text.Length() - 1) & "*"
    Dim DirectoryBase As String = "C:\Users\RandomUser\Desktop\"
    
    Dim DirInfo As DirectoryInfo = New DirectoryInfo(DirectoryBase)
    Dim dInfoSearchFolder As DirectoryInfo =
        DirInfo.GetDirectories(txtCont, SearchOption.AllDirectories).FirstOrDefault
    
    If IsNothing(dInfoSearchFolder) Then
        'Notify that the search path was not found
    End If
    
    dInfoSearchFolder = New DirectoryInfo(Path.Combine(dInfoSearchFolder.FullName, "Videos"))
    FileList.Items.AddRange(dInfoSearchFolder.GetFiles().Select(Function(f) f.FullName).ToArray())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多