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

Vb.net VB通配符文件路径filesystem.dir匹配,vb.net,listbox,wildcard,file-search,Vb.net,Listbox,Wildcard,File Search,正在尝试创建一个程序,该程序将基于通配符搜索在目录中查找文件夹,并将找到的所有文件结果显示在列表框中。我似乎在查找类似于文本框输入名称的文件夹时遇到了一些问题 举个可笑的例子: 文本框条目为“猫和D” Filename=“\Cats and Dogs Funnies\” 该文件中充满了大量精彩的猫狗图片和视频(在单独的子文件夹中),我想将这些视频以.fullname的形式放在一个列表框中,单击一个按钮即可获得 我似乎遇到了一个难题(除了邋遢和有点新),那就是获得与通配符文件夹匹配的查找结果。下面

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

举个可笑的例子:
文本框条目为“猫和D”
Filename=“\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
Private子按钮1\u单击(发送者作为对象,e作为事件参数)处理按钮1。单击
Dim tbxCont,fipath作为字符串
Dim di作为System.IO.DirectoryInfo
Dim diar作为System.IO.FileInfo
tbxCont=TextBox1.Text
fipath=“C:Users\RandomUser\Desktop\”
如果txbCont=无,则
MsgBox(“请提供名称”,MsgBoxStyle.OkOnly)
出口接头
其他的
如果FileSystem.Dir(fipath&txbCont.Substring(0,txbCont.Length-4)和“*”,FileAttribute.Directory)“,那么
di=新的System.IO.DirectoryInfo(fipath和txbCont.Substring(0,txbCont.Length-4)和“*”和“\Videos\”)
对于di.GetFiles(“*”中的每个diar,searchOption:=IO.searchOption.AllDirectories)
FileList.Items.Add(diar.FullName)
下一个
出口接头
如果结束
端接头
它似乎没有使用通配符来查找类似的文件。我有没有更好的办法?或者,可能从已发现的内容中获得已发现的结果


非常感谢

我假设
Filename=“\Cats and Dogs Funnies\”
的意思是
DirectoryName=“Cats and Dogs Funnies”

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

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

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

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

谢谢你的回复@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
的实际路径。