Member 12801143 Ответов: 2

Получить файлы из каталога (включая все подкаталоги) и открыть файл


Привет,

У меня есть небольшое приложение в VB.NET что при нажатии на кнопку DatagriedView следует искать и открывать файл excel в каталоге с несколькими подкаталогами упорядоченными по годам (2019 .... 2018 ......). В этих подкаталогах находятся несколько отличных файлов с именами по номерам (5673455.xlsx ..... 11122232.xlsx ...). Имя этого файла должно быть помещено в текстовое поле и при нажатии на кнопку должен открыться файл.

Как сделать так, чтобы не нужно было помещать полное имя файла в текстовое поле и открывать его? Например полное имя файла "23456_B_D.xlsx" и размещение текстового поля только "23456" открывает файл. Что делать, если файл имеет расширение xls, а не xlsx?

Вот код, который у меня есть до сих пор. Но я получаю ошибку: "значение типа '1-мерный массив строк' не может быть преобразовано в 'String'

Что я уже пробовал:

Private Sub DataGridView_descricao_ColumnAdded(sender As System.Object, e As DataGridViewCellEventArgs) _
                                       Handles DataGridView_descricao.CellContentClick
    Dim senderGrid = DirectCast(sender, DataGridView)

    If TypeOf senderGrid.Columns(e.ColumnIndex) Is DataGridViewButtonColumn AndAlso
       e.RowIndex >= 0 Then

        Dim filePaths As String() = Directory.GetFiles("C:\SALES", "*.xlsx", SearchOption.AllDirectories)
        Dim fileName As String = TextBox_sa.Text + ".xlsx"
        System.Diagnostics.Process.Start(Path.Combine(filePaths, fileName))
    End If

End Sub

F-ES Sitecore

GetFiles возвращает несколько строк, поэтому вам нужно будет пройти через каждую строку в массиве filePaths в цикле for и выполнить процесс.Начните с каждого из них.

Member 12801143

вы можете показать мне, как это сделать?

2 Ответов

Рейтинг:
15

Richard Deeming

Если вы просто хотите запустить первый файл, имя которого содержит введенный текст:

Dim allFiles As IEnumerable(Of String) = Directory.EnumerateFiles("C:\SALES", "*.xls?", SearchOption.AllDirectories)
Dim filePath As String = allFiles.FirstOrDefault(Function(f) f.IndexOf(TextBox_sa.Text, StringComparison.OrdinalIgnoreCase) <> -1)

If filePath Is Nothing Then
    MessageBox.Show("File not found")
Else
    System.Diagnostics.Process.Start(filePath)
End If

Если вы хотите запустить все соответствующие файлы:
Dim allFiles As IEnumerable(Of String) = Directory.EnumerateFiles("C:\SALES", "*.xls?", SearchOption.AllDirectories)
Dim filePaths As IList(Of String) = allFiles.Where(Function(f) f.IndexOf(TextBox_sa.Text, StringComparison.OrdinalIgnoreCase) <> -1).ToList()

If filePaths.Count = 0 Then
    MessageBox.Show("File not found")
Else
    For Each filePath As String In filePaths
        System.Diagnostics.Process.Start(filePath)
    Next
End If


Member 12801143

Спасибо Ричарду, считающему, что это работает!!!

Рейтинг:
0

#realJSOP

Используйте диалоговое окно FileOpen.

Sub SomeButton_Click(sender As Object, e As EventArgs) Handles SomeButton.Click
    Using dialog As New OpenFileDialog
        If dialog.ShowDialog() <> DialogResult.OK Then Return
        File.Copy(dialog.FileName, newPath)
    End Using
End Sub


Я оставлю это вам, чтобы продемонстрировать свое безумное мастерство в формировании этого фрагмента кода во что-то применимое к вашему собственному варианту использования.


Member 12801143

Использование диалогового окна в качестве нового OpenFileDialog
Если диалог.ShowDialog() <> DialogResult.Хорошо тогда возвращайся
Файл.Копировать(диалог.Имя файла, пути к файлам)
Конец Использования

Я не понимаю в чем дело

#realJSOP

Ну, я тоже не понимаю, что случилось, потому что я не вижу, что ты делаешь, и ты нам ничего не рассказываешь.