VB Wildcard filepath filesystem.dir соответствует - PullRequest
0 голосов
/ 29 апреля 2018

Попытка создать программу, которая найдет папку в каталоге на основе поиска по шаблону и выведет все найденные файлы в список. Кажется, у меня возникают некоторые проблемы с поиском папки, которая похожа на имя ввода из текстового поля.

Для смешного примера:
Запись в текстовом поле: "Кошки и D"
Filename = "\ Приколы кошек и собак \"
файл заполнен кучей отличных картинок и видео с кошками и собаками (в отдельных подпапках), и я хочу поместить видео в список в виде .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

Похоже, он не использует подстановочный знак для поиска файла. Есть ли лучший способ, которым я мог бы пойти об этом? Или, возможно, получить найденный результат из того, что было найдено?

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Кредит @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())
0 голосов
/ 29 апреля 2018

Я предполагаю, что Filename = "\Cats and Dogs Funnies\" означает DirectoryName= "Cats and Dogs Funnies".

Сначала необходимо проверить, может ли предоставленный пользователем шаблон поиска сопоставляться с существующим каталогом.
Если это не так, сообщите, что введенный частичный путь не может быть найден, и верните его.
Если она существует, добавьте подпапку «Видео» в Путь, перечислите все файлы, которые содержит этот объединенный путь, и добавьте файлы FullName в элемент управления ListBox.

(Конечно, некоторая обработка ошибок необходима, прежде всего, для проверки того, что фильтр каталогов, использующий подстановочные знаки, действительно возвращает желаемые результаты).

Это возможное решение:

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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...