VB 通配符文件路径 filesystem.dir 匹配

VB Wildcard filepath filesystem.dir match

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

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

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

非常感谢。

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

您应该首先检查用户提供的搜索模式是否可以映射到现有目录。
如果没有,提示输入的部分路径找不到,return.
如果存在,将 "Videos" 子文件夹添加到路径,列出此组合路径包含的所有文件并将文件全名添加到列表框控件。

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

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

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 对通配符搜索的编辑

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())